필터 지우기
필터 지우기

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

조회 수: 1 (최근 30일)
dp sb
dp sb 2015년 8월 3일
댓글: Image Analyst 2015년 8월 4일
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.

채택된 답변

Image Analyst
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
dp sb
dp sb 2015년 8월 4일
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 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 CenterFile Exchange에서 Characters and Strings에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by