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实现简单HTML表格解析的方法
Jun 15 Python
python 中的divmod数字处理函数浅析
Oct 17 Python
Python通过命令开启http.server服务器的方法
Nov 04 Python
python 3.6 +pyMysql 操作mysql数据库(实例讲解)
Dec 20 Python
浅谈Python黑帽子取代netcat
Feb 10 Python
python3中获取文件当前绝对路径的两种方法
Apr 26 Python
Python框架Flask的基本数据库操作方法分析
Jul 13 Python
Python企业编码生成系统之主程序模块设计详解
Jul 26 Python
Python 字符串、列表、元组的截取与切片操作示例
Sep 17 Python
详解python内置常用高阶函数(列出了5个常用的)
Feb 21 Python
python+adb命令实现自动刷视频脚本案例
Apr 23 Python
尝试使用Python爬取城市租房信息
Apr 12 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 和 XML: 使用expat函数(三)
2006/10/09 PHP
php侧拉菜单 漂亮,可以向右或者向左展开,支持FF,IE
2009/10/15 PHP
PHP打开和关闭文件操作函数总结
2014/11/18 PHP
php强大的时间转换函数strtotime
2016/02/18 PHP
thinkphp5框架实现数据库读取的数据转换成json格式示例
2019/10/10 PHP
基于jquery的一行代码轻松实现拖动效果
2010/12/28 Javascript
利用jQuery操作对象数组的实现代码
2011/04/27 Javascript
jquery js 重置表单 reset()具体实现代码
2013/08/05 Javascript
解析Javascript小括号“()”的多义性
2013/12/03 Javascript
javascript实现信息的显示和隐藏如注册页面
2013/12/03 Javascript
textarea 控制输入字符字节数(示例代码)
2013/12/27 Javascript
基于NodeJS的前后端分离的思考与实践(三)轻量级的接口配置建模框架
2014/09/26 NodeJs
第九章之路径分页标签与徽章组件
2016/04/25 Javascript
jQuery Ajax和getJSON获取后台普通json数据和层级json数据用法分析
2016/06/08 Javascript
js中的关联数组与普通数组详解
2016/07/27 Javascript
BootStrap glyphicon图标无法显示的解决方法
2016/09/06 Javascript
微信小程序 生命周期和页面的生命周期详细介绍
2017/01/19 Javascript
原生JS实现圣旨卷轴展开效果
2017/03/06 Javascript
Nodejs异步回调之异常处理实例分析
2018/06/22 NodeJs
小程序封装wx.request请求并创建接口管理文件的实现
2019/04/29 Javascript
pycharm 使用心得(九)解决No Python interpreter selected的问题
2014/06/06 Python
利用Python如何生成hash值示例详解
2017/12/20 Python
详解Python最长公共子串和最长公共子序列的实现
2018/07/07 Python
Python 类的魔法属性用法实例分析
2019/11/21 Python
Python面向对象魔法方法和单例模块代码实例
2020/03/25 Python
Python PyQt5整理介绍
2020/04/01 Python
美国瑜伽品牌:Gaiam
2017/10/31 全球购物
Sephora丝芙兰泰国官方网站:国际知名化妆品购物
2017/11/15 全球购物
初中生学习的自我评价
2013/11/14 职场文书
数字化校园建设方案
2014/05/03 职场文书
工厂门卫的岗位职责
2014/07/27 职场文书
电子商务实训报告总结
2014/11/05 职场文书
2014年食堂工作总结
2014/11/20 职场文书
停课通知书
2015/04/24 职场文书
太空授课观后感
2015/06/17 职场文书
CSS使用伪类控制边框长度的方法
2022/01/18 HTML / CSS