Azzera filtri
Azzera filtri

How to use Loop to write multiple rows into my output CSV ?

1 visualizzazione (ultimi 30 giorni)
I am writing a code to read multiple images from a path and analyze them to throw them into two buckets for ex: 'Good Images' and 'Bad Images'. I want to write the path of the image into an output CSV file which contains two columns : Path_GoodImage, Path_BadImage with their respective rows as the image paths.
Since i have a loop to read each image and analyze, i want too write the path under it's specific column for every image read.
How can i create a CSV file like such which takes the minimum time as i would be writing about a million rows!
for f = 1 : numberOfImageFiles
fullFileName = fullfile(thisFolder, baseFileNames(f).name);
I = imread(fullFileName);
% Some Analysis
If Image = Good
%%i want to write the path of the image which is fullFileName to the CSV under the column Path_GoodImage.
esle
%%i want to write the path of the image which is fullFileName to the CSV under the column Path_BadImage.
end
end
Also another question - Would it take more time if i actually just write the image using imwrite to two folders named 'GoodImage\' and 'BadImage\' . If Yes is it a significant amount of time difference.? I am scared to do this beacuse i am processing about a million images and time is a big concern.
Any help is appreciated. Thank You very much.

Risposta accettata

Image Analyst
Image Analyst il 3 Ago 2015
Try it this way:
If Image == Good
%%i want to write the path of the image which is fullFileName to the CSV under the column Path_GoodImage.
% Write filename to column 3 and nothing to column 4.
fprintf(fid, '%d,%f,%s,,%f\n', value1, value2, fullFileName, value3);
else
%%i want to write the path of the image which is fullFileName to the CSV under the column Path_BadImage.
% Write nothing to column 3 and filename to column 4.
fprintf(fid, '%d,%f,,%s,%f\n', value1, value2, fullFileName, value3);
end
Take note of the commas in the format specifier strings in the above code. It's writing the fullFileName to either one column or the other.
It should not take any more time to write to two files than 1. Instead of fid which is the same for both cases, Just use fidGood for the file in the "good" folder, and fidBad for the file in the "bad" folder.
  6 Commenti
dp sb
dp sb il 4 Ago 2015
Thank You Sir!
Can you please give me some info on this:
Would the string hold- say about a million records. ? Will this slow down the process or would there be any memory issues ?
Image Analyst
Image Analyst il 4 Ago 2015
No, the string holds one record, and you're writing out one string at a time. You could try building up one gigantic string with all the lines included in it before you write any out, and then just write out that enormous string in one call if you want. It might be faster - who knows?

Accedi per commentare.

Più risposte (0)

Categorie

Scopri di più su Characters and Strings in Help Center e File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by