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中的二维数组的操作方法
May 02 Python
python多进程共享变量
Apr 06 Python
浅谈用Python实现一个大数据搜索引擎
Nov 28 Python
Python实现的计数排序算法示例
Nov 29 Python
Windows下Anaconda的安装和简单使用方法
Jan 04 Python
python 对txt中每行内容进行批量替换的方法
Jul 11 Python
Python2和Python3.6环境解决共存问题
Nov 09 Python
Django上使用数据可视化利器Bokeh解析
Jul 31 Python
Python实现栈和队列的简单操作方法示例
Nov 29 Python
python函数调用,循环,列表复制实例
May 03 Python
Python容器类型公共方法总结
Aug 19 Python
新手必备Python开发环境搭建教程
May 28 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也能干大事 随机函数
2015/04/14 PHP
浅析php如何实现App常用的秒发功能
2016/08/03 PHP
mysql desc(DESCRIBE)命令实例讲解
2016/09/24 PHP
PHP常用排序算法实例小结【基本排序,冒泡排序,快速排序,插入排序】
2017/02/07 PHP
浅析PHP类的反射来实现依赖注入过程
2018/02/06 PHP
超轻量级的基于jquery的三级展开列表
2011/04/26 Javascript
js+JQuery返回顶部功能如何实现
2012/12/03 Javascript
jQuery中:lt选择器用法实例
2014/12/29 Javascript
js获取微信版本号的方法
2015/05/12 Javascript
javascript实现省市区三级联动下拉框菜单
2015/11/17 Javascript
BootStrap智能表单实战系列(八)表单配置json详解
2016/06/13 Javascript
javascript设计模式之module(模块)模式
2016/08/19 Javascript
jQuery简单实现遍历单选框的方法
2017/03/06 Javascript
Node做中转服务器转发接口
2017/10/18 Javascript
完美解决axios跨域请求出错的问题
2018/02/05 Javascript
vue中实现methods一个方法调用另外一个方法
2018/02/08 Javascript
axios简单实现小程序延时loading指示
2018/07/30 Javascript
vue3.0 CLI - 2.4 - 新组件 Forms.vue 中学习表单
2018/09/14 Javascript
详解Vue 如何监听Array的变化
2019/06/06 Javascript
微信小程序自定义模态弹窗组件详解
2019/12/24 Javascript
Vue父组件向子组件传值以及data和props的区别详解
2020/03/02 Javascript
Python 搭建Web站点之Web服务器网关接口
2016/11/06 Python
Python cookbook(数据结构与算法)从序列中移除重复项且保持元素间顺序不变的方法
2018/03/13 Python
python去掉空白行的多种实现代码
2018/03/19 Python
Pandas 对Dataframe结构排序的实现方法
2018/04/10 Python
Python3 虚拟开发环境搭建过程(图文详解)
2020/01/06 Python
详解利用css3的var()实现运行时改变scss的变量值
2021/03/02 HTML / CSS
英国体育器材进口商店:UK Sport Imports
2017/03/14 全球购物
澳大利亚工具仓库:Tools Warehouse
2018/10/15 全球购物
街头时尚在线:JESSICABUURMAN
2019/06/16 全球购物
2014年德育工作总结
2014/11/20 职场文书
2015廉洁自律个人总结
2015/02/14 职场文书
2015年社区关工委工作总结
2015/04/03 职场文书
2016教师学习教育法心得体会
2016/01/19 职场文书
使用Html+Css实现简易导航栏功能(导航栏遇到鼠标切换背景颜色)
2021/04/07 HTML / CSS
利用正则表达式匹配浮点型数据
2022/05/30 Java/Android