1

我在一个名为 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\BasePics 中命名的名称相同或相似,而不是在一个变量下具有 30 个图像的串联数组images。我想有 30 个单独的变量,名称如A1, A2,A3,B1,B2,B3etc...

另外,当我只是要求:

    dir images\BasePics

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

谢谢!!

4

2 回答 2

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

现在你有一个带有字段的结构 ......对于每个图像。imgsA1C10

于 2013-08-05T21:37:37.767 回答
1

你很亲密。我只是dir('Images\BasePics\*.jpg')用来摆脱无关的文件。

您想要的命名系统不适合额外的批处理(您真的要键入所有 A1、A2 等吗?)。我要么保持顺序,并存储要匹配的文件名列表,要么使用结构数组,如 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
于 2013-08-05T21:38:05.843 回答