我正在尝试访问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张图像,其余图像被覆盖。
如何修改程序以保存所有文件?
答案 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\
x
和Cells
的声明将受益于行中的分号,以防止它们输出到控制台,减慢程序速度并阻塞命令窗口。 MATLAB提出的橙色摆动并不是为了庆祝节日,而是提出了有用的警告。 (不要与红色摆动混为一谈,它们会带来严重的错误,因此MATLAB根本无法运行。)