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控制台中实现进度条功能
Nov 10 Python
Python的math模块中的常用数学函数整理
Feb 04 Python
浅谈python中的变量默认是什么类型
Sep 11 Python
Pycharm无法使用已经安装Selenium的解决方法
Oct 13 Python
python 移动图片到另外一个文件夹的实例
Jan 10 Python
树莓派+摄像头实现对移动物体的检测
Jun 22 Python
python2.7实现复制大量文件及文件夹资料
Aug 31 Python
Python 解决OPEN读文件报错 ,路径以及r的问题
Dec 19 Python
python中的 zip函数详解及用法举例
Feb 16 Python
pycharm设置python文件模板信息过程图解
Mar 10 Python
解决django的template中如果无法引用MEDIA_URL问题
Apr 07 Python
Python实现代码块儿折叠
Apr 15 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
某大型网络公司应聘时的笔试题目附答案
2008/03/27 PHP
win2003服务器使用WPS的COM组件的一些问题解决方法
2012/01/11 PHP
PHP实现过滤各种HTML标签
2015/05/17 PHP
php数字每三位加逗号的功能函数
2015/10/22 PHP
PHP 设计模式系列之 specification规格模式
2016/01/10 PHP
php 无限级分类 获取顶级分类ID
2016/03/13 PHP
Yii调试查看执行SQL语句的方法
2016/07/15 PHP
PHP 7.0新增加的特性介绍
2017/06/08 PHP
thinkPHP利用ajax异步上传图片并显示、删除的示例
2018/09/26 PHP
PHP实现微信公众号验证Token的示例代码
2019/12/16 PHP
jQuery创建自己的插件(自定义插件)的方法
2010/06/10 Javascript
js 未结束的字符串常量错误解决方法
2010/06/13 Javascript
jQuery中将函数赋值给变量的调用方法
2012/03/23 Javascript
js style动态设置table高度
2014/10/21 Javascript
Javascript 拖拽的一些高级的应用(逐行分析代码,让你轻松了拖拽的原理)
2015/01/23 Javascript
jquery中EasyUI实现同步树
2015/03/01 Javascript
JavaScript简单表格编辑功能实现方法
2015/04/16 Javascript
浅谈javascript原型链与继承
2015/07/13 Javascript
解决jQuery使用JSONP时产生的错误
2015/12/02 Javascript
JS中用try catch对代码运行的性能影响分析
2016/12/26 Javascript
JS中的BOM应用
2018/02/02 Javascript
VUE引入第三方js包及调用方法讲解
2019/03/01 Javascript
vue中渲染对象中属性时显示未定义的解决
2020/07/31 Javascript
React 条件渲染最佳实践小结(7种)
2020/09/27 Javascript
python ---lambda匿名函数介绍
2019/03/13 Python
对django 模型 unique together的示例讲解
2019/08/06 Python
在django中使用apscheduler 执行计划任务的实现方法
2020/02/11 Python
CSS3中媒体查询结合rem布局适配手机屏幕
2019/06/10 HTML / CSS
allbeauty美国:英国在线美容店
2019/03/11 全球购物
软件测试工程师笔试题带答案
2015/03/27 面试题
2014元旦晚会策划方案
2014/02/19 职场文书
2014公安机关纪律作风整顿思想汇报
2014/09/13 职场文书
场地使用证明模板
2014/10/25 职场文书
2019最新版劳务派遣管理制度
2019/08/16 职场文书
详解Redis的三种常用的缓存读写策略步骤
2022/05/06 Redis
css样式important规则的正确使用方式
2022/06/10 HTML / CSS