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实现通过shelve修改对象实例
Sep 26 Python
Zabbix实现微信报警功能
Oct 09 Python
python 中random模块的常用方法总结
Jul 08 Python
Python根据指定日期计算后n天,前n天是哪一天的方法
May 29 Python
python opencv判断图像是否为空的实例
Jan 26 Python
Python将列表数据写入文件(txt, csv,excel)
Apr 03 Python
python 实现二维列表转置
Dec 02 Python
Python FFT合成波形的实例
Dec 04 Python
Python基于wordcloud及jieba实现中国地图词云图
Jun 09 Python
使用Tensorflow-GPU禁用GPU设置(CPU与GPU速度对比)
Jun 30 Python
python 统计list中各个元素出现的次数的几种方法
Feb 20 Python
Python中三种花式打印的示例详解
Mar 19 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
用php将任何格式视频转为flv的代码
2009/09/03 PHP
php像数组一样存取和修改字符串字符
2014/03/21 PHP
PHP性能分析工具XHProf安装使用教程
2015/05/13 PHP
一个js实现的所谓的滑动门
2007/05/23 Javascript
JavaScript 动态添加表格行 使用模板、标记
2009/10/24 Javascript
jQuery源码分析之Event事件分析
2010/06/07 Javascript
Javascript创建Silverlight Plugin以及自定义nonSilverlight和lowSilverlight样式
2010/06/28 Javascript
等待指定时间后自动跳转或关闭当前页面的js代码
2013/07/09 Javascript
js导出txt示例代码
2014/01/14 Javascript
网页运行时提示对象不支持abigimage属性或方法
2014/08/10 Javascript
javascript实现 百度翻译 可折叠的分享按钮列表
2015/03/12 Javascript
Jquery中$.post和$.ajax的用法小结
2015/04/28 Javascript
JavaScript子窗口调用父窗口变量和函数的方法
2015/10/09 Javascript
JavaScript Array对象详解
2016/03/01 Javascript
node.js使用cluster实现多进程
2016/03/17 Javascript
使用vue实现简单键盘的示例(支持移动端和pc端)
2017/12/25 Javascript
使用Python和xlwt向Excel文件中写入中文的实例
2018/04/21 Python
Python基于win32ui模块创建弹出式菜单示例
2018/05/09 Python
使用Python制作表情包实现换脸功能
2019/07/19 Python
Django之提交表单与前后端交互的方法
2019/07/19 Python
Django中的用户身份验证示例详解
2019/08/07 Python
Gweniss格温妮丝女包官网:英国纯手工制造潮流包包品牌
2018/02/07 全球购物
与UNIX有关的几个名词
2015/09/17 面试题
实习期自我鉴定
2013/10/11 职场文书
公务员转正考察材料
2014/02/07 职场文书
政府法律服务方案
2014/06/14 职场文书
交通安全责任书范本
2014/07/24 职场文书
餐饮周年庆活动方案
2014/08/14 职场文书
农民工预备党员思想汇报
2014/09/14 职场文书
镇班子对照检查材料思想汇报
2014/09/24 职场文书
南京大屠杀观后感
2015/06/02 职场文书
休假证明书
2015/06/24 职场文书
邓小平文选读书笔记
2015/06/29 职场文书
谢师宴学生致辞
2015/07/27 职场文书
2016年寒假社会实践活动总结
2015/10/10 职场文书
《鲁滨逊漂流记》之六读后感(4篇)
2019/09/29 职场文书