如何使用matlab快捷方便的批量调整图片亮度
Posted Suppart
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用matlab快捷方便的批量调整图片亮度相关的知识,希望对你有一定的参考价值。
不知道大家有没有这种体验。需要打印一些自己拍的文件的照片,而这些照片的有的亮度低,打印出来整个纸面都是灰暗、发黑的。自己也可以一张张自己PS,但这样效率极低,费力不讨好~
正如“人类的懒惰推动着科技的进步”所说一样,我也开始研究怎样能方便的调节图片的亮度~
不多说了,上程序:
%% Instructions
% 修改图片的亮度(v),通过文件对话框的方式获得需要修改的图片。
% 然后将修改后的图片以“'yyyy-mm-dd HH:MM:SS'+图片名”名字存储到原位置。
% 目前的程序能区分出(JPEG TIFF GIF BMP PNG HDF PCX XWD ICO CUR RAS PBM PGM PPM)文件格式
%
%%
clc
clear all
close all
pathsep='\\'; %设置分隔符
%% 获取要修改的图片所在的文件夹和图片名称及类型(这个方法太笨了,淘汰)(这个程序不需要选择具体的某张图片,直接选择图片所在文件夹,不过这个文件夹中必须全都是imread可以识别的类型才可以!交互体验极差,故删去,留在这里是给大家借鉴一下,少走弯路滴!)
% dirPath =uigetdir(cd,'选择图片所在文件夹');
% dirList=dir(dirPath);
% list=struct2cell(dirList); %结构体转元胞,数据转置了
% filename=list(1,:); %提取文件名
% a=cellfun('length',(strfind(filename,['.png']))); %找到'.png'的位置,读取其后的字符串,和imread允许的图片类型进行比较
% find(a~=0);
% filename=list(1,a~=0);
%% 另一种方法,获取要修改的图片(JPEG TIFF GIF BMP PNG HDF PCX XWD ICO CUR RAS PBM PGM PPM)
'*.jpg;*.tif;*.gif;*.bmp;*.png;*.hdf;*.pcx;*.xwd;*.ico;*.cur;*.ras;*.pbm;*.pgm;*.ppm',...
'All Kinds of Photos Supported by Imread Function(*.jpg;*.tif;*.gif;*.bmp;*.png;*.hdf;*.pcx;*.xwd;*.ico;*.cur;*.ras;*.pbm;*.pgm;*.ppm)';...
'*.jpg','JPEG (*.jpg)'; ...
'*.tif','TIFF (*.tif)'; ...
'*.gif','GIF (*.gif)'; ...
'*.bmp','BMP (*.bmp)'; ...
'*.png','PNG (*.png)'; ...
'*.hdf','HDF (*.hdf)'; ...
'*.pcx','PCX (*.pcx)'; ...
'*.xwd','XWD (*.xwd)'; ...
'*.ico','ICO (*.ico)'; ...
'*.cur','CUR (*.cur)'; ...
'*.ras','RAS (*.ras)'; ...
'*.pbm','PBM (*.pbm)'; ...
'*.pgm','PGM (*.pgm)'; ...
'*.ppm','PPM (*.ppm)'; ...
'*.*', 'All Files (*.*)', ...
'Pick a file', ...
'MultiSelect', 'on');
filename=cellstr(filename); %因为使用uigetfile函数如果只勾选一个文件时,得到的filename是字符串类型,而在后面的程序中filename是当作cell类型来处理的,所以需要cellstr转换数据格式为cell。
%% 是否逐张调节
options.Resize='on';
options.WindowStyle='normal';
options.Interpreter='tex';
xuanze1=inputdlg(sprintf('%s\\r\\n','是否逐张调节图片','请输入1(是)/2(否)'),...
'选择',[1,40],'1',options);
%% 逐张读取图片,修改后保存(如果之前选择逐张修改,则每次需要输入修改的值,直到满意为止;如果没有要逐张修改,则会按照统一的修改方式进行修改并保存)
if xuanze11~='1'
xuanze2=inputdlg('色调调节率','饱和度调节率','亮度调节率','全部图片',[1,40],'1','1','1',options); %亲测色调和饱和度通过这种方式调节图片是不对的! 亮度调节率的范围在0.5~1.5之间比较合适
for p=1:length(filename)
rgb = imread(fullfile(pathname,filenamep));
[m,n,k] = size(rgb); %读取图片大小
hsv = rgb2hsv(rgb); %颜色空间转换
H = hsv(:,:,1); % 色调
S = hsv(:,:,2); % 饱和度
V = hsv(:,:,3); % 亮度
hsv(:,:,1) =str2double(xuanze21).*H; %色调需要增强的倍数,可以根据图片情况动态调整
hsv(:,:,2) =str2double(xuanze22).*S; %饱和度需要增强的倍数,可以根据图片情况动态调整
hsv(:,:,3) =str2double(xuanze23).*V; %亮度需要增强的倍数,可以根据图片情况动态调整
rgb1 = hsv2rgb(hsv); %转为RGB,进行显示
imwrite(rgb1,strcat(pathname,pathsep,datestr(now,'yyyy-mm-dd HH:MM:SS'),filenamep));
end
else
for p=1:length(filename)
rgb = imread(fullfile(pathname,filenamep));
xuanze31=2;
while xuanze31~='1'
figure;
imshow(rgb);
xuanze2=inputdlg('色调调节率','饱和度调节率','亮度调节率',['第',num2str(p),'张图片'],[1,40],'1','1','1',options);
[m,n,k] = size(rgb); %读取图片大小
hsv = rgb2hsv(rgb); %颜色空间转换
H = hsv(:,:,1); % 色调
S = hsv(:,:,2); % 饱和度
V = hsv(:,:,3); % 亮度
hsv(:,:,1) =str2double(xuanze21).*H; %色调需要增强的倍数,可以根据图片情况动态调整
hsv(:,:,2) =str2double(xuanze22).*S; %饱和度需要增强的倍数,可以根据图片情况动态调整
hsv(:,:,3) =str2double(xuanze23).*V; %亮度需要增强的倍数,可以根据图片情况动态调整
rgb1 = hsv2rgb(hsv); %转为RGB,进行显示
imshow(rgb1);
xuanze3=inputdlg(sprintf('%s\\r\\n','效果是否满意','请输入1(是)/2(否)'),'选择',1,'1',options);
close(figure(1))
end
imwrite(rgb1,strcat(pathname,pathsep,datestr(now,'yyyy-mm-dd HH:MM:SS'),filenamep));
end
end
为了大家直接复制程序就能运行,我就不在程序中插图了~
下面是图:
1、开始运行程序
2、选择需要修改的图片(允许随机选取多张)
3、之后会询问是否一张一张的修改图片亮度,如果选择是,那么每张图片可以设置不同的亮度;
4、如果选择是,会先显示图片,好让你决定亮度如何调整
5、之后会询问亮度要修改为多少,是一个倍数的关系,如果刚刚选择了否,那么这个界面只会出现一次;
6、修改后会显示效果图(刚刚我们设置亮度调解率为0.8,效果如下图)
7、如果对结果满意就修改下一张图片,如果不满意会给你重新修改图片的机会
版权声明:本文为 Suppart 的原创文章,转载请务必注明出处~
http://blog.csdn.net/qq_36938128/article/details/79751496
以上是关于如何使用matlab快捷方便的批量调整图片亮度的主要内容,如果未能解决你的问题,请参考以下文章