您的位置:首页 > 编程语言 > MATLAB

如何使用matlab快捷方便的批量调整图片亮度

2018-03-30 01:33 344 查看
    不知道大家有没有这种体验。需要打印一些自己拍的文件的照片,而这些照片的有的亮度低,打印出来整个纸面都是灰暗、发黑的。自己也可以一张张自己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,进行显
4000

            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、如果选择是,会先显示图片,好让你决定亮度如何调整


5、之后会询问亮度要修改为多少,是一个倍数的关系,如果刚刚选择了否,那么这个界面只会出现一次;

6、修改后会显示效果图(刚刚我们设置亮度调解率为0.8,效果如下图)


7、如果对结果满意就修改下一张图片,如果不满意会给你重新修改图片的机会


版权声明:本文为 Suppart 的原创文章,转载请务必注明出处~  http://blog.csdn.net/qq_36938128/article/details/79751496
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息