单文件夹情况
说明
使用Matlab对图片进行操作时,大量的单张图片不利于操作,此时需要将图片转化为.mat格式,.mat方便我们对数据的处理,使我们更加高效的利用数据。文章中的代码是以PIE数据集作为转换的原始数据,每张图片的名称是连续的数字,相同类别的图片张数相等且名称连续。代码不是很复杂,关键的地方已经加上了注释,就不再详细说明。以下是我的代码。也可以去我的git上下载程序和测试图片。
代码
%%针对图片名为连续标号的Matlab程序
file_path = 'C:\Users\Arlen\Documents\MATLAB\PictoMat\test\';%图片路径可以根据自己需要修改;
pic = '*jpg';%图片格式,根据自己的图片格式进行修改;
img_path_list = dir(strcat(file_path,pic));%获取该文件夹中所有jpg格式的信息
fea = [];%特征
gnd = [];%所属类别
num_perClass=24;%每一类包含的图片张数
for i = 1:size(img_path_list,1)
img=imread([file_path,num2str(i),'.jpg']);%此处‘.jpg’根据需求更改
im = reshape(img,1,size(img,1)*size(img,2));
fea(i,:) = im;
class = fix(i/num_perClass)+1;%不能整除时,类别数比真实类别差1
if(class)
gnd(i,1) = class;
if(~rem(i,num_perClass)) %如果余数为0,则类别直接是商
gnd(i,1) = i/num_perClass;
end
end
end
save test.mat fea gnd
多文件夹情况
说明及代码
文节中的代码针对一个文件夹下包含多个子文件夹,每个子文件下包含数量不等的图片。git代码
clc;clear;
% you can change the path
addpath('.\007\');
path = '.\007\';
savePath = '.\result\';
filename = dir(path);
filelen = length(filename);
names = {};
output = {};
k = 0;
for i = 1:filelen-2 % dataset
subPath = [path,filename(i+2).name,'\'];
if isdir(subPath)
fn = dir(subPath);
fnlen = length(fn);
for j = 1:fnlen-2 % prdiction case
pic = [];
temp = [];
k = k+1;
temp = fn(j+2).name;
names{k} = temp;
pic = imread([subPath, temp]);
output{k} = pic;
end
end
end
save result.mat output names
disp('done !')
代码如有错误,欢迎指正。