在matlab上批处理上百张.png图像,目的是将所有图片进行增强(如histeq直方图均衡),然后写入指定文件夹,图像名称不变。
思路:
- 用dir函数读所有图片的信息并生产一个结构组,dir详见matlab的help
- 利用name读取每个png文件的图像构成元胞pngcell
注意:对cell的操作花括号和圆括号的不同:
通过小括号()里面加下标,访问cell数组中的数据,返回的是对应的cell。
通过大括号{}里面加下标,访问cell数组中的数据,返回的是对应cell的内容。
如对本程序中的pngcell操作:
- 利用dir中的name信息和pngcell的图像信息再构造一个只含文件名和图像数据的结构组pngfile
- 接下来写个循环对图像进行操作就行,可以用imwrite将图像保存至指定位置
代码:
clear all
%读取文件夹中的.png文件
src='D:\Files\diploma_project\dark\darkface163\';
finf = dir([src,'*.png']);
%根据文件夹中的文件格式,选择读取类型,如.jpg、.png等.其中finf是一个结构体数组,...
...包含的darkface下所有png文件的名称、修改时间大小、是否文件夹等属性。
n = length(finf); %数组大小,即图片的数量
pngcell = cell(n,1); %生成n*1的元胞
for k=1:n
filename = [src,finf(k).name]; %构造第k个文件的绝对路径(合并文件路径和文件名)
pngcell{k} = importdata(filename);%将文件夹中的文件每个作为一个元胞按行存储在元胞中
pngfile(k).name= finf(k).name; %创建新结构组,并设定名称
pngfile(k).srcpng=cell2mat(pngcell(k));%将图像数据导入结构组
end
%该节生成了一个含有文件名和图像数据的结构组pngfile,...
...名称排序序是matlab自动读取的字符串排序型,如1,10,111,2,...
%% 直方图均衡批处理
dst='D:\Files\diploma_project\dark\darkface163_histeq\';
for k=1:n
B=histeq(pngfile(k).srcpng); %直方图均衡
%imshow(B);
imwrite(B,[dst,pngfile(k).name]) %将处理后的图片保存到目标文件夹,命名与源文件相同
end