Python实现PS图像调整黑白效果示例


Posted in Python onJanuary 25, 2018

本文实例讲述了Python实现PS图像调整黑白效果。分享给大家供大家参考,具体如下:

这里用Python 实现 PS 里的图像调整?黑白,PS 里的黑白并不是简单粗暴的将图像转为灰度图,而是做了非常精细的处理,具体的算法原理和效果图可以参考附录说明。

比起之前的程序,对代码进行了优化,完全用矩阵运算代替了 for 循环,运算效率提升了很多。具体的代码如下:

import numpy as np
import matplotlib.pyplot as plt
from skimage import io
file_name='D:/Image Processing/PS Algorithm/4.jpg';
img=io.imread(file_name)
img = img * 1.0
Color_ratio = np.zeros(6)
Color_ratio[0]=0.4;   # Red
Color_ratio[1]=0.6;   # Yellow
Color_ratio[2]=0.4;   # Green
Color_ratio[3]=0.6;   # Cyan
Color_ratio[4]=0.2;   # Blue
Color_ratio[5]=0.8;   # Magenta
max_val = img.max(axis = 2)
min_val = img.min(axis = 2)
sum_val = img.sum(axis = 2)
mid_val = sum_val - max_val - min_val
mask_r = (img[:, :, 0] - min_val - 0.01) > 0
mask_r = 1 - mask_r
mask_g = (img[:, :, 1] - min_val - 0.01) > 0
mask_g = 1 - mask_g
mask_b = (img[:, :, 2] - min_val - 0.01) > 0
mask_b = 1 - mask_b
ratio_max_mid = mask_r * Color_ratio[3] + mask_g * Color_ratio[5] + mask_b * Color_ratio[1]
mask_r = (img[:, :, 0] - max_val + 0.01) < 0
mask_r = 1 - mask_r
mask_g = (img[:, :, 1] - max_val + 0.01) < 0
mask_g = 1 - mask_g
mask_b = (img[:, :, 2] - max_val + 0.01) < 0
mask_b = 1 - mask_b
ratio_max= mask_r * Color_ratio[4] + mask_g * Color_ratio[0] + mask_b * Color_ratio[2]
I_out = max_val * 1.0
I_out = (max_val-mid_val)*ratio_max + (mid_val-min_val)*ratio_max_mid + min_val
plt.figure()
plt.imshow(img/255.0)
plt.axis('off')
plt.figure(2)
plt.imshow(I_out/255.0, plt.cm.gray)
plt.axis('off')
plt.show()

附录:PS 图像调整算法——黑白

黑白调整

Photoshop CS的图像黑白调整功能,是通过对红、黄、绿、青、蓝和洋红等6种颜色的比例调节来完成的。能更精细地将彩色图片转换为高质量的黑白照片。

Photoshop CS图像黑白调整功能的计算公式为:

gray= (max - mid) * ratio_max + (mid - min) * ratio_max_mid + min

公式中:gray为像素灰度值,max、mid和min分别为图像像素R、G、B分量颜色的最大值、中间值和最小值,ratio_max为max所代表的分量颜色(单色)比率,ratio_max_mid则为max与mid两种分量颜色所形成的复色比率。

默认的单色及复色比率为:

Color_Ratio(1)=0.4;     %%%% Red
Color_Ratio(2)=0.6;     %%%% Yellow
Color_Ratio(3)=0.4;     %%%% Green
Color_Ratio(4)=0.6;     %%%% Cyan
Color_Ratio(5)=0.2;     %%%% Blue
Color_Ratio(6)=0.8;     %%%% Magenta

Program:

%%%%% 程序实现图像的黑白调整功能
clc;
clear all;
close all;
Image=imread('9.jpg');
Image=double(Image);
R=Image(:,:,1);
G=Image(:,:,2);
B=Image(:,:,3);
[row, col] = size(R);
Gray_img(1:row,1:col)=0;
Sum_rgb=R+G+B;
%%%% 各种颜色的默认比率
Color_Ratio(1:6)=0;
Color_Ratio(1)=0.4;   %%%% Red
Color_Ratio(2)=0.6;   %%%% Yellow
Color_Ratio(3)=0.4;   %%%% Green
Color_Ratio(4)=0.6;   %%%% Cyan
Color_Ratio(5)=0.2;   %%%% Blue
Color_Ratio(6)=0.8;   %%%% Magenta
for i=1:row
  for j=1:col
    r=R(i,j);
    g=G(i,j);
    b=B(i,j);
    Max_value=max(r,max(g,b));
    Min_value=min(r,min(g,b));
    Mid_value=Sum_rgb(i,j)-Max_value-Min_value;
    if(Min_value==r)
      Index=0;
    elseif(Min_value==g)
      Index=2;
    else
      Index=4;
    end
    ratio_max_mid=Color_Ratio(mod(Index+3,6)+1);
    if(Max_value==r)
      Index=1;
    elseif(Max_value==g)
      Index=3;
    else
      Index=5;
    end
    ratio_max=Color_Ratio(Index);
    Temp=(Max_value-Mid_value)*ratio_max+(Mid_value-Min_value)...
           *ratio_max_mid+Min_value;
    Gray_img(i,j)=(Max_value-Mid_value)*ratio_max+(Mid_value-Min_value)...
           *ratio_max_mid+Min_value;
  end
end
imshow(Image/255);
figure, imshow(Gray_img/255);

本例Python运行结果如下:

原图:

Python实现PS图像调整黑白效果示例

运行效果图:

Python实现PS图像调整黑白效果示例

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
简单介绍Python中的floor()方法
May 15 Python
基于numpy.random.randn()与rand()的区别详解
Apr 17 Python
Python求一批字符串的最长公共前缀算法示例
Mar 02 Python
python禁用键鼠与提权代码实例
Aug 16 Python
Python3 pandas 操作列表实例详解
Sep 23 Python
Python numpy数组转置与轴变换
Nov 15 Python
python绘制雪景图
Dec 16 Python
Python-numpy实现灰度图像的分块和合并方式
Jan 09 Python
python让函数不返回结果的方法
Jun 22 Python
PyQt5-QDateEdit的简单使用操作
Jul 12 Python
python 使用elasticsearch 实现翻页的三种方式
Jul 31 Python
Python合并pdf文件的工具
Jul 01 Python
1 行 Python 代码快速实现 FTP 服务器
Jan 25 #Python
http请求 request失败自动重新尝试代码示例
Jan 25 #Python
Python实现PS图像调整颜色梯度效果示例
Jan 25 #Python
Python使用requests发送POST请求实例代码
Jan 25 #Python
python使用pandas实现数据分割实例代码
Jan 25 #Python
python实现闹钟定时播放音乐功能
Jan 25 #Python
python实现壁纸批量下载代码实例
Jan 25 #Python
You might like
一个目录遍历函数
2006/10/09 PHP
thinkphp5 加载静态资源路径与常量的方法
2017/12/24 PHP
JS支持带x身份证号码验证函数
2008/08/10 Javascript
在JS中最常看到切最容易迷惑的语法(转)
2010/10/29 Javascript
javascript检查表单数据是否改变的方法
2013/07/30 Javascript
利用jQuery实现可输入搜索文字的下拉框
2013/10/23 Javascript
js实现ifram取父窗口URL地址的方法
2015/02/09 Javascript
Js实现无刷新删除内容
2015/04/29 Javascript
js兼容pc端浏览器并有多种弹出小提示的手机端浮层控件实例
2015/04/29 Javascript
angularjs表格分页功能详解
2016/01/21 Javascript
Node.js中防止错误导致的进程阻塞的方法
2016/08/11 Javascript
获取jqGrid中选择的行的数据
2016/11/30 Javascript
js实现一个可以兼容PC端和移动端的div拖动效果实例
2016/12/09 Javascript
js实现简单的选项卡效果
2017/02/23 Javascript
JS获取短信验证码倒计时的实现代码
2017/05/22 Javascript
JS简单实现父子窗口传值功能示例【未使用iframe框架】
2017/09/20 Javascript
使用nodeJs来安装less及编译less文件为css文件的方法
2017/11/20 NodeJs
vue实现个人信息查看和密码修改功能
2018/05/06 Javascript
vue底部加载更多的实例代码
2018/06/29 Javascript
Vue组件化开发之通用型弹出框的实现
2020/02/28 Javascript
解决ant design vue中树形控件defaultExpandAll设置无效的问题
2020/10/26 Javascript
[01:03:09]完美世界DOTA2联赛PWL S2 Forest vs SZ 第二场 11.25
2020/11/26 DOTA
python查找指定具有相同内容文件的方法
2015/06/28 Python
python中in在list和dict中查找效率的对比分析
2018/05/04 Python
python正则表达式匹配[]中间为任意字符的实例
2018/12/25 Python
Django如何开发简单的查询接口详解
2019/05/17 Python
Django如何实现上传图片功能
2019/08/16 Python
详解Matplotlib绘图之属性设置
2019/08/23 Python
Python算法中的时间复杂度问题
2019/11/19 Python
解决keras加入lambda层时shape的问题
2020/06/11 Python
波兰家具和室内装饰品购物网站:Vivre
2018/04/10 全球购物
Under Armour安德玛意大利官网:美国高端运动科技品牌
2020/01/16 全球购物
CHRONEXT英国:您的首选奢华腕表目的地
2020/03/30 全球购物
2014年机关党委工作总结
2014/12/11 职场文书
体检通知范文
2015/04/21 职场文书
学习nginx基础知识
2021/09/04 Servers