我正在尝试访问 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 %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
免费咨询:
i
和j
是虚构单位。在我看来,最好不要将它们用作循环索引。您的桌面很可能不是保存内容的最佳位置。例如,在
Documents
文件夹中创建一个具有apt名称的文件夹,例如C:UsersUSERDocumentsROIfrom4k
x
和Cells
的声明将受益于行上的右分号,以防止它们输出到控制台,从而减慢程序速度并堵塞命令窗口。MATLAB放置的橙色摆动不是为了庆祝,它们提供了一个有用的警告。(不要与红色摆动混淆,它们会出现严重错误,因此 MATLAB 根本无法运行。