How to use Loop to write multiple rows into my output CSV ?
5 次查看(过去 30 天)
显示 更早的评论
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.
0 个评论
采纳的回答
Image Analyst
2015-8-3
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 个评论
Image Analyst
2015-8-4
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?
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Characters and Strings 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!