本章将介绍如何对我们文件夹中的图片进行批量处理,也就是批量进行SVD分解,当然这本质上也是一个循环的过程。但如何实现该循环,如何利用matlab批量读取文件进行处理,这是我们本章要体现的重点思想
一、找到文件路径与提取文件信息
folder_name = 'D:\我的文件\数学建模\清风资料\1. 视频配套所有课件和代码_后续还会不断更新\第13讲. 奇异值分解SVD和图形处理\代码和例题数据\压缩文件夹内的所有图片\葫芦娃七兄弟';
dirOutput=dir(fullfile(folder_name, '*.jpg'));
files={dirOutput.name};
首先,我们将文件夹路径以字符串的形式保存在folder_name中
之后,利用fullfile函数可根据指定的文件夹和文件名构建完整的文件路径。第一个参数为文件的路径,第二个参数为文件的名称,'*.jpg'
这里的*代表任意字符串,整串代码代表以.jpg为后缀的所有文件
dir函数会返回一个数组,数组里面包含着每个子文件的信息
之后,将文件的名称单独储存到一个变量files之中
二、进行循环,批量处理图片文件
n = length(files); % 图片的总数
ratio = 0.9; % 要保留的特征比例为90%
for i = 1:n
disp('---------------------------------------------------------------------------------------------')
photoname = files(i); % 注意此时的photoname是一个cell字符串对象,需要转换为字符串
% 如果我们直接把这个cell类型的变量,传递到其他函数中作为string类型使用,就会出现问题
name = photoname{1}; %直接这样取第一个元素就可以啦~cell数组中取元素使用大括号
photo_address = fullfile(folder_name, name); %图片的绝对地址
disp(photo_address)
save_address = fullfile(folder_name, strcat('compress_',name)); % 压缩后文件的保存地址
photo_compress(photo_address, save_address, ratio)
disp('---------------------------------------------------------------------------------------------')
end
我们仍然使用自己编好的photo_compress函数进行处理,需要输入我们的图片的地址,图片保存的地址以及需要保留的特征比例
那么关键就是提取图片的名称,我们虽然已经将名称保存到了files变量中,但是以cell的结构保存的,因此我们可以用photoname{1}
,用在后面直接打大括号的方式提取字符串
之后,就可以直接用我们编号的函数进行循环,批量处理文件