批量处理文件夹内的所有图片

本章将介绍如何对我们文件夹中的图片进行批量处理,也就是批量进行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},用在后面直接打大括号的方式提取字符串
之后,就可以直接用我们编号的函数进行循环,批量处理文件

posted @ 2024-07-10 15:36  卢宇博  阅读(16)  评论(0编辑  收藏  举报