如何在for循环中读取后立即存储图像?

时间:2014-03-07 07:27:02

标签: image matlab

我尝试了以下程序来读取多张图像(约300张图像)。现在,我希望在将每个图像读取到某个位置之后立即存储这些图像,其名称为g1g2g3 ...是否可以在循环中执行此操作? 这是我的尝试:

for i=1:5
    m=imread(['C:\Users\shree\Desktop\1\im' num2str(i) '.jpg']);
    figure,imshow(m);
end

3 个答案:

答案 0 :(得分:1)

我强烈建议您将它们存储在单元格数组中:

for k=1:5
    image_path = ['C:\Users\shree\Desktop\1\im' num2str(i) '.jpg']; %// I have moved this to be on its own line as it will make debugging easier. You don't have to, but I think it's a good idea.
    images_all{k}  = imread(image_path);
end

通过使用eval创建变量名称,例如g1g2等,您会使用无法管理的变量来污染工作区。另外,如果它们都在一个单元格数组中,则可以很容易地将相同的函数应用于循环或cellfun中的每一个。

例如,如果您想将它们全部转换为灰度:

images_grey = cellfun(@rgb2gray, images_all, 'UniformOutput', false);

答案 1 :(得分:0)

试试这个 -

for i=1:5
    img =imread(['C:\Users\shree\Desktop\1\im' num2str(i) '.jpg']);
    evalc(['g' num2str(i) '=img;']);
end
figure,imshow(g1);
figure,imshow(g2);

另一种方法可能是使用STRUCT并将这些图像存储为结构的字段。

存储为4D矩阵是另一种有效的方式,如herohuyongtao所建议的那样。

答案 2 :(得分:0)

您可以将它们全部保存到一个大矩阵中:

for i=1:5  
    images_all(:, :, :, i)  = imread(['C:\Users\shree\Desktop\1\im' num2str(i) '.jpg'])
end

此后,所有图像都将存储在images_all中(此处假设所有图像均为彩色图像,即3个通道)。