Как построить имена файлов во вложенном цикле - PullRequest
0 голосов
/ 22 октября 2018

Я пытаюсь получить доступ к изображениям 4k и обрезать некоторые области на основе ROI (4 ROI в моем случае) и сохранить их в некотором каталоге.Пока все работает нормально, кроме обработки циклов имени файла.

Ниже мой код прилагается.Я получаю доступ к N 4k изображениям, обрезаю и изменяю их размер до желаемого разрешения.В конце концов, когда я попытался сохранить данные, изображения были перезаписаны.

N=2;
for img = 1:N
    x = gTruth.LabelData.crack{img,1}

    for i=1:4
        Cells = x(i,1:4)

        baseFileName = theFiles(img).name;
        fullFileName = fullfile(myFolder, baseFileName);
        fprintf(1, 'Now reading %s\n', fullFileName);
        imageArray = imread(fullFileName);
        CroP = imcrop(imageArray,Cells);
        imshow(CroP);
        B = imresize(CroP,[256 256]);
        imshow(B);
        imwrite(B,strcat('C:\Users\USER\Desktop\Directory\imagefile_00',num2str(i),'.png'));
    end
end

Мой вопрос заключается в том, что после запуска цикла i он сохраняет 4 изображения и снова для img сохраняет четыре значения,Теперь, когда код запускается, он сохраняет только последние 4 изображения, а не 8. Я должен получить i*N общее количество изображений, но я получаю только 4, а остальные перезаписываются.

Как я могу адаптировать свойпрограмма для сохранения всех файлов?

1 Ответ

0 голосов
/ 22 октября 2018
imwrite(B,strcat('C:\Users\USER\Desktop\Directory\imagefile_00',num2str(i),'.png'));

- вот где проблема.Вы используете num2str(i) для изменения номера и i=[1,2,3,4].Таким образом, вы не можете создать файл, который находится за пределами чисел от 1 до 4. Кроме того, если вы хотите что-то на основе img, вы можете использовать, например,

imwrite(B,strcat('C:\Users\USER\Desktop\Directory\imagefile_',num2str(img),num2str(i),'.png'));

, который создаст файл с именем imagefile_11 дляпервое изображение и первая область, imagefile_12 для первого изображения, вторая область, imagefile_324 для 32-го изображения, четвертая область и т. д. Конечно, меняйте в соответствии с вашими потребностями.

Пример в действии:

>> i=3;img=1;
>> strcat('C:\Users\USER\Desktop\Directory\imagefile_',num2str(img),num2str(i),'.png')

ans =

C:\Users\USER\Desktop\Directory\imagefile_13.png

>> i=1;img=2;
>> strcat('C:\Users\USER\Desktop\Directory\imagefile_',num2str(img),num2str(i),'.png')

ans =

C:\Users\USER\Desktop\Directory\imagefile_21.png

Бесплатный совет:

  • i и j являются воображаемымиблок .На мой взгляд, предпочтительнее не использовать их в качестве индексов петель.

  • Скорее всего, ваш рабочий стол - не лучшее место для хранения вещей.Создайте папку, например, в папке Documents с подходящим именем, например, C:\Users\USER\Documents\ROIfrom4k\

  • При объявлении x и Cells будет использоваться закрывающая точка с запятой налинии, чтобы предотвратить их вывод на консоль, замедление работы программы и засорение командного окна.Оранжевые шевеления, которые MATLAB ставит там, не для веселья, они представляют собой полезное предупреждение.(Не путать с красными покачиваниями, они представляют серьезную ошибку, из-за которой MATLAB вообще не может работать.)

...