Matlab 同一文件夹下图片批量处理的两种简单方法
最近因为实验中有许多图片需要处理,本来的做法是一张张读取图片,这是相当麻烦的,因为每处理一张图片就需要修改相应的图片名。于是就想着要是可以批量处理就好了,这样就可以大大提高效率。通过阅读文章和自己亲身的实践,下面总结两种方法,希望可以给其他人做参考,也方便自己以后使用。
1. 几个函数的介绍
在这之前需要首先介绍几个用到的函数:
1.1 strcat函数
这个函数就是字符串连接函数,举个例子:
a='Good';
b='morning';
c=strcat(a,b)
运行结果:
c =
Goodmorning
1.2 dir函数
dir的功能就是列出指定文件夹下的文件,并将其放在一个结构体当中。有如下几种用法:d
dir(‘.’)列出当前目录下所有子文件夹和文件
dir(‘G:\实验图片’)列出指定目录下所有子文件夹和文件
dir(‘*.m’)列出当前目录下符合正则表达式的文件夹和文件
2. 两种实现方法
介绍完上面的函数下面就介绍两种实现的方法
2.1 方法一
直接看代码:
file_path = 'G:\实验图片-2018-8-15\';% 图像文件夹路径
img_path_list = dir(strcat(file_path,'*.jpg'));%获取该文件夹中所有.jpg格式的图像
img_num = length(img_path_list);%获取图像总数
if img_num > 0 %有满足条件的图像
for pn = 1:img_num %逐一读取图像
image_name = img_path_list(pn).name;% 图像名
img_origin = imread(strcat(file_path,image_name));%读取图像
fprintf('%d %s\n',pn,strcat(file_path,image_name));% 显示正在处理的图像名
%%此处添加具体的图像处理程序
end
end
这种方法就是先将指定路径下的“.jpg”图片通过dir函数放到结构体当中,再逐一地对图像进行读取和处理。
fprintf('%d %s\n',pn,strcat(file_path,image_name));
这句代码其实很有用的,可以实时打印消息,告诉你目前处理到哪个图片了,也方便我们判断程序有没有问题。
2.2 方法二
还是先看代码:
fig_path='G:\实验图片-2018-8-15\';
cd (fig_path); %切换到指定路径下
allfigs=struct2cell(dir('*.jpg')); %只处理jpg文件
[w,img_num]=size(allfigs); %获得jpg文件的个数
for pn=1:img_num %逐次取出图片
image_name=allfigs{1,pn}; %allfigs{1,pn}存储每个图片的名字
img_origin=imread(image_name); %读取图片
fprintf('%d %s\n',pn,strcat(fig_path,image_name));
%%此处添加具体的图像处理程序
end
这种方法本质上和上面是相似的,差别主要在于这里通过struct2cell函数,将.jpg文件列表转换成了胞元数组形式,通过胞元数组处理每个图片。
3. 含有子文件夹的情况
这种方法只是针对文件夹当中不含有子文件夹的情况,如果子文件夹当中也有图片需要处理,那么就需要修改了。但是本人由于处理过程不涉及这种情况,就没有深究了。只是看到一篇文章中提供了一种办法,但本人也没有去验证,在这里就先贴出来。含有子文件夹的处理办法