如何使用matlab快捷方便的批量调整图片亮度 | 您所在的位置:网站首页 › 多张图批量调亮度 › 如何使用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) [filename, pathname, filterindex] = uigetfile( ... {'*.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 xuanze1{1}~='1' xuanze2=inputdlg({'色调调节率','饱和度调节率','亮度调节率'},'全部图片',[1,40],{'1','1','1'},options); %亲测色调和饱和度通过这种方式调节图片是不对的! 亮度调节率的范围在0.5~1.5之间比较合适 for p=1:length(filename) rgb = imread(fullfile(pathname,filename{p})); [m,n,k] = size(rgb); %读取图片大小 hsv = rgb2hsv(rgb); %颜色空间转换 H = hsv(:,:,1); % 色调 S = hsv(:,:,2); % 饱和度 V = hsv(:,:,3); % 亮度 hsv(:,:,1) =str2double(xuanze2{1}).*H; %色调需要增强的倍数,可以根据图片情况动态调整 hsv(:,:,2) =str2double(xuanze2{2}).*S; %饱和度需要增强的倍数,可以根据图片情况动态调整 hsv(:,:,3) =str2double(xuanze2{3}).*V; %亮度需要增强的倍数,可以根据图片情况动态调整 rgb1 = hsv2rgb(hsv); %转为RGB,进行显示 imwrite(rgb1,strcat(pathname,pathsep,datestr(now,'yyyy-mm-dd HH:MM:SS'),filename{p})); end else for p=1:length(filename) rgb = imread(fullfile(pathname,filename{p})); xuanze3{1}=2; while xuanze3{1}~='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(xuanze2{1}).*H; %色调需要增强的倍数,可以根据图片情况动态调整 hsv(:,:,2) =str2double(xuanze2{2}).*S; %饱和度需要增强的倍数,可以根据图片情况动态调整 hsv(:,:,3) =str2double(xuanze2{3}).*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'),filename{p})); end end为了大家直接复制程序就能运行,我就不在程序中插图了~ 下面是图: 1、开始运行程序 2、选择需要修改的图片(允许随机选取多张) 3、之后会询问是否一张一张的修改图片亮度,如果选择是,那么每张图片可以设置不同的亮度; 4、如果选择是,会先显示图片,好让你决定亮度如何调整 版权声明:本文为 Suppart 的原创文章,转载请务必注明出处~ http://blog.csdn.net/qq_36938128/article/details/79751496 |
今日新闻 |
推荐新闻 |
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 |