使用imread可以容易地单张读取图片,那么怎样才能批量读取一个文件夹中的多张图片呢?
- 如果文件夹中的图片已经编号
预置知识:
- cell元胞数组。cell是一种特殊的数据结构,这个数组中的数据类型是任意的
>> C={1,'cell';{1,2,3},{}}
C =
2×2 cell 数组
{[ 1]} {'cell' }
{1×3 cell} {0×0 cell}
>> cell(2,3)
ans =
2×3 cell 数组
{0×0 double} {0×0 double} {0×0 double}
{0×0 double} {0×0 double} {0×0 double}
使用cell命令可以声明cell数组,声明格式与zeros()函数,ones()函数完全相同。
注意cell数组是用大括号括起来的,可以直接声明,也可以使用C{index}的格式进行索引
2.strcat()函数
用来串接字符数组。可以串接一般字符数组,也可以串接元胞数组。
如果两个字符数组都只有一个字符串,那么好说
>> s1='lwz';
>> s2='hhh';
>> strcat(s1,s2)
ans =
'lwzhhh'
如果是每个字符数组有多个元素呢?
>> str1={'lwz','hhh'};
>> str2={'lbw','nb'};
>> strcat(str1,str2)
ans =
1×2 cell 数组
{'lwzlbw'} {'hhhnb'}
可以看到是“对位串接”
现在开始读取图片:
n=10;
I=cell(1,n);
for i=1:n
imName=strcat(num2str(i),'.pgm');
I{i}=imread(imName);
end
- 如果图片没有编号
cd('C:\Users\22926\Desktop\图像工程基础\s1');
file=dir('*.pgm');
[k,len]=size(file);
I=cell(k,1);
for i=1:k
name=file(i).name;
I{i}=imread(name);
figure(i);
imshow(I{i});
end
注:
- cd命令的含义是切换当前路径,与DOS命令一样
- dir命令():
- Matlab使用dir函数获得指定文件夹下的所有子文件夹和文件,并存放在在一种为文件结构体数组中.(struct,规模是k*6,包含六个属性)
- dir函数可以有调用方式为:
dir('.')列出当前目录下所有子文件夹和文件
dir('G:\Matlab')列出指定目录下所有子文件夹和文件
dir('*.m')列出当前目录下符合正则表达式的文件夹和文件 - 每次imshow()之前加一个figure(i),可以搞出多个图片显示窗口