MATLAB从文件夹中读取几个图像

时间:2013-08-05 21:26:49

标签: matlab file-io

我在名为Images的文件夹中有一个名为BasePics的文件夹。在BasePics内部有30张JPEG图像。我想知道以下是否可行:是否可以使用imread()命令编写读取所有这些图像的脚本。图像的名称有点顺序:C1A_Base.jpg,C1B_Base.jpg,C1C_Base.jpg,C2A_Base.jpg,C2B_Base.jpg,C2C_Base.jpg等......一直到C10C_Base.jpg

可以以某种方式使用循环:

    file = dir('Images\BasePics');
    NF = length(file);
    for k = 1:NF
        images(k) = imread(fullfile('ImagesBasePics',file(k))
        imagesc(images(k))
    end

这是我想要做的一个粗略的想法,但我想知道是否可以使用我在Images文件夹中的当前命名格式。我还希望每个图像都是自己的变量,其名称与目前文件夹Images \ BasePics中命名的名称相同或相似,而不是在一个变量{{1}下都有一个包含30个图像的连续数组}。我想有30个单独的变量,名称如images等......

当我只是要求:

A1, A2,A3,B1,B2,B3

Matlab输出33个文件,而不是30.文件夹的开头有两个额外的文件:'。'和'..'和一个在最后:'Thumbs.db'当我单独查看文件夹时,这些不存在,有没有办法以编程方式让Matlab跳过这些?

谢谢!

2 个答案:

答案 0 :(得分:2)

由于您事先知道文件的名称,因此可以跳过dir并继续阅读文件:

for l = 'ABC'
    for n=1:10
        nm = sprintf('C%d%c_Base.jpg', n, l );
        fnm = sprintf('%c%d', l, n );
        imgs.(fnm) = imread( fullfile('images','BasePics', nm ) );
    end
end

现在,您有一个结构 imgs,其中包含每个图片的字段A1 ... C10

答案 1 :(得分:1)

你非常接近。我只想使用dir('Images\BasePics\*.jpg')来删除无关的文件。

您想要的命名系统不适合其他批处理(您真的想要输入所有的A1,A2等吗?)。我要保持顺序,并存储要匹配的文件名列表,或者使用struct array,如images.C1A等。

dirlist = dir('Images\BasePics\*.jpg');

for k = 1:length(dirlist);
    fname = dirlist(k).name;
    [path,name,ext] = fileparts(fname); % separate out base name of file
    images.(name) = imread(fullfile('Images\BasePics', fname));
end