把某文件夹下(可以下设数个子文件夹)一些大小不一的图像修改为统一的尺寸,然后保存到指定的新文件夹,记录整个程序跑完的时间,matlab操作,上手简单,保证一学就会
对文件夹下的图片做统一操作的循环,借鉴了这个大哥分享的内容
深度学习-MATLAB数据增广
利用了matlab中的imresize函数修改图片,是看了这个大哥的内容受到启发
图片尺寸批量resize的matlab并行代码
1. MATLAB中实现单张图片尺寸变换的函数
imresize函数用于对图像做缩放处理,调用格式:
B = imresize(A, scale)
返回的图像B的长宽是图像A的长宽的scale倍,即缩放图像。 scale大于1, 则放大图像; scale小于1, 缩小图像。
B = imresize(A, [numrows numcols])
numrows和numcols分别指定目标图像的高度和宽度,
可以用method参数指定在改变图像尺寸时所使用的算法
更详细说明可以看看这个matlab中imresize
2. MATLAB实现的代码
核心是imresize的应用
% 统一修改多个图像的尺寸
clear;clc;close all;
tic; % 用于计算程序运行时间,和toc搭配使用
NEWfile_path = 'C:\Users\HS\Desktop\尺寸规整\尺度规整结果'; % 存放结果
p=genpath('C:\Users\HS\Desktop\尺寸规整\规整前');%获取指定文件夹下所有子文件的路径
%这些路径存在于字符串p中,以';'分割
length_p=size(p,2);%字符串p的长度
path={};%建立一个元胞数组,数组的每个单元中包含一个目录
temp=[];
for i=1:length_p %寻找分隔符';',一旦找到,则将路径temp写入path数组中
if p(i)~=';'
temp=[temp p(i)];
else
temp=[temp '\'];%在路径的后面加上\
path=[path;temp];
temp=[];
end
end
clear p length_p temp
%获得了指定文件夹及其所有子文件夹,接下来就是逐一文件夹读取图像,利用上面的path数组,将路径取出来
file_num=size(path,1);%获取子文件夹的个数
for i=1:file_num
file_path = path{i};
img_path_list=dir(strcat(file_path,'*.jpg')); %获取每个文件夹下的图像列表
img_num=length(img_path_list);%获取文件夹下图像的数量
if img_num > 0
for j=1:img_num
image_name=img_path_list(j).name;%获取图像名
new_image_name = image_name(1:end-4);%去掉原图名中的.jpg
% 正式操作
image=imread(strcat(file_path,image_name));%读取文件夹下的每一帧图像
fprintf('第%d个文件夹中第%d个图片 %s\n',i,j,strcat(file_path,image_name));%显示正在读取的文件夹和其中图像数量
NEWimage = imresize(image,[256 256]); % resize为256x256
filename = strcat(new_image_name,'-re.jpg');% 修改文件名
%im_pathfile=fullfile(file_path,filename);% 保存到原文件夹下
NEWim_pathfile=fullfile(NEWfile_path,filename);% 保存到新的文件夹下
imwrite(NEWimage,NEWim_pathfile);
end
end
end
toc; % 计时结束了
fprintf(['用时=',num2str(toc)]);
3. 效果展示
保证能上手,轻松解决尺寸规整问题