如何在嵌套循环中生成文件名

时间:2018-10-22 11:42:16

标签: matlab file-io nested-loops file-handling

我正在尝试访问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 :(得分:4)

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的文件,为第32个图像,第四个区域创建名为imagefile_324的文件。当然根据您的需求。

实际示例:

>> 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 and j are the imaginary unit。我认为最好不要将它们用作循环索引。

  • 您的台式机最有可能不是保存内容的最佳位置。在例如您的Documents文件夹中建立一个具有适当名称的文件夹,例如C:\Users\USER\Documents\ROIfrom4k\

  • xCells的声明将受益于行中的分号,以防止它们输出到控制台,减慢程序速度并阻塞命令窗口。 MATLAB提出的橙色摆动并不是为了庆祝节日,而是提出了有用的警告。 (不要与红色摆动混为一谈,它们会带来严重的错误,因此MATLAB根本无法运行。)