如何在嵌套循环中构建文件名



我正在尝试访问 4k 图像并裁剪一些基于 ROI 的区域(在我的情况下为 4 ROI(并将它们存储在某个目录中。到目前为止,除了文件名的循环处理外,一切正常。

下面是我附加的代码。我正在访问N4k 图像,裁剪并将它们调整为我想要的分辨率。最后,当我尝试保存数据时,图像被覆盖了。

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 %sn', fullFileName);
imageArray = imread(fullFileName);
CroP = imcrop(imageArray,Cells);
imshow(CroP);
B = imresize(CroP,[256 256]);
imshow(B);
imwrite(B,strcat('C:UsersUSERDesktopDirectoryimagefile_00',num2str(i),'.png'));
end
end

我的问题是,在循环i运行后,它保存了 4 张图像,img再次保存了 4 个值。现在,当代码运行时,它仅保存最后 4 张图像,而不是 8 张。我应该得到i*N图像总数,但我只得到 4 张,其余部分被覆盖。

如何调整我的程序以保存所有文件?

imwrite(B,strcat('C:UsersUSERDesktopDirectoryimagefile_00',num2str(i),'.png'));

是问题所在。您可以使用num2str(i)更改数字,并i=[1,2,3,4].因此,您不能创建数字 1 到 4 之外的文件。根据img

,您也可以使用例如
imwrite(B,strcat('C:UsersUSERDesktopDirectoryimagefile_',num2str(img),num2str(i),'.png'));

这将为第一个图像和第一个区域创建一个名为imagefile_11的文件,为第一个图像、第二个区域创建一个名为imagefile_12的文件,imagefile_324为第 32 个图像、第四个区域等创建文件,当然会根据您的需要进行更改。

实际示例:

>> i=3;img=1;
>> strcat('C:UsersUSERDesktopDirectoryimagefile_',num2str(img),num2str(i),'.png')
ans =
C:UsersUSERDesktopDirectoryimagefile_13.png
>> i=1;img=2;
>> strcat('C:UsersUSERDesktopDirectoryimagefile_',num2str(img),num2str(i),'.png')
ans =
C:UsersUSERDesktopDirectoryimagefile_21.png

免费咨询:

  • ij是虚构单位。在我看来,最好不要将它们用作循环索引。

  • 您的桌面很可能不是保存内容的最佳位置。例如,在Documents文件夹中创建一个具有apt名称的文件夹,例如C:UsersUSERDocumentsROIfrom4k

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

相关内容

  • 没有找到相关文章

最新更新