如何在嵌套循环中构建文件名
How to build filenames in a nested loop
我正在尝试访问 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 个,其余的被覆盖。
如何调整我的程序以保存所有文件?
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\
x
和 Cells
的声明将受益于行上的结束分号,以防止它们输出到控制台,减慢程序和阻塞命令 window。 MATLAB 放在那里的橙色摆动不是为了庆祝,它们提供了一个有用的警告。 (不要与红色摆动混淆,那些会出现严重错误,因此 MATLAB 根本无法 运行。)
我正在尝试访问 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 个,其余的被覆盖。
如何调整我的程序以保存所有文件?
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
andj
are the imaginary unit。在我看来,最好不要将它们用作循环索引。您的桌面很可能不是保存内容的最佳位置。例如,在您的
Documents
文件夹中创建一个具有适当名称的文件夹,例如C:\Users\USER\Documents\ROIfrom4k\
x
和Cells
的声明将受益于行上的结束分号,以防止它们输出到控制台,减慢程序和阻塞命令 window。 MATLAB 放在那里的橙色摆动不是为了庆祝,它们提供了一个有用的警告。 (不要与红色摆动混淆,那些会出现严重错误,因此 MATLAB 根本无法 运行。)