我在名为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跳过这些?
谢谢!
答案 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