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中文字符串截取问题
Jun 15 Python
Python数组遍历的简单实现方法小结
Apr 27 Python
python最长回文串算法
Jun 04 Python
Flask框架响应、调度方法和蓝图操作实例分析
Jul 24 Python
对python多线程SSH登录并发脚本详解
Feb 14 Python
Python 基于FIR实现Hilbert滤波器求信号包络详解
Feb 26 Python
解决Jupyter因卸载重装导致的问题修复
Apr 10 Python
python爬虫---requests库的用法详解
Sep 28 Python
python Matplotlib基础--如何添加文本和标注
Jan 26 Python
python 指定源路径来解决import问题的操作
Mar 04 Python
对Keras自带Loss Function的深入研究
May 25 Python
解决Python字典查找报Keyerror的问题
May 26 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
星际争霸教主Flash的ID由来:你永远不会知道他之前的ID是www!
2019/01/18 星际争霸
codeigniter使用技巧批量插入数据实例方法分享
2013/12/31 PHP
PHP对文件进行加锁、解锁实例
2015/01/23 PHP
php实现的SSO单点登录系统接入功能示例分析
2016/10/12 PHP
document 和 document.all 分别什么时候用
2006/06/22 Javascript
用 Javascript 验证表单(form)中的单选(radio)值
2009/09/08 Javascript
js arguments,jcallee caller用法总结
2013/11/30 Javascript
jquery 隐藏与显示tr标签示例代码
2014/06/06 Javascript
将HTML格式的String转化为HTMLElement的实现方法
2014/08/07 Javascript
javascript学习笔记(四)function函数部分
2014/09/30 Javascript
7个去伪存真的JavaScript面试题
2016/01/07 Javascript
移动端日期插件Mobiscroll.js使用详解
2016/12/19 Javascript
详解Node.js 命令行程序开发教程
2017/06/07 Javascript
Vue中Axios从远程/后台读取数据
2019/01/21 Javascript
微信小程序如何调用图片接口API并居中显示
2019/06/29 Javascript
纯JS实现五子棋游戏
2020/05/28 Javascript
实现一个Vue自定义指令懒加载的方法示例
2020/06/04 Javascript
解决echarts中横坐标值显示不全(自动隐藏)问题
2020/07/20 Javascript
python创建列表并给列表赋初始值的方法
2015/07/28 Python
Python多线程实现同步的四种方式
2017/05/02 Python
python基于itchat模块实现微信防撤回
2019/04/29 Python
python画双y轴图像的示例代码
2019/07/07 Python
python实现把两个二维array叠加成三维array示例
2019/11/29 Python
Python图像处理库PIL的ImageDraw模块介绍详解
2020/02/26 Python
python中对二维列表中一维列表的调用方法
2020/06/07 Python
加拿大著名时装品牌:SOIA & KYO
2016/08/23 全球购物
英国排名第一的宠物店:PetPlanet
2020/02/02 全球购物
Java软件工程师综合面试题笔试题
2013/09/08 面试题
小学生自我评价范例
2013/09/24 职场文书
日语求职信范文
2013/12/17 职场文书
公司庆典活动邀请函
2014/01/09 职场文书
大学生创业感言
2014/01/25 职场文书
公司请假条格式
2014/04/11 职场文书
爱的教育读书笔记
2015/06/26 职场文书
python Django框架快速入门教程(后台管理)
2021/07/21 Python
Innodb存储引擎中的后台线程详解
2022/04/03 MySQL