如何使用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)

[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 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快捷方便的批量调整图片亮度的主要内容,如果未能解决你的问题,请参考以下文章

matlab 彩色图片拼接融合后如何消除拼接缝?

MATLAB中如何将一幅图像改为不同的亮度级?

matlab批量读取文件夹里面的文件名,并且调整图片大小,再按照原名称输出

matlab亮度增加100

python 批量读取图片平均亮度

如何批量调整Word中图片大小