Matlab 同一文件夹下图片批量处理的两种简单方法

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. 含有子文件夹的情况

这种方法只是针对文件夹当中不含有子文件夹的情况,如果子文件夹当中也有图片需要处理,那么就需要修改了。但是本人由于处理过程不涉及这种情况,就没有深究了。只是看到一篇文章中提供了一种办法,但本人也没有去验证,在这里就先贴出来。含有子文件夹的处理办法

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值