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 相关文章推荐
Django中使用group_by的方法
May 26 Python
对Python中DataFrame按照行遍历的方法
Apr 08 Python
Python 3.x基于Xml数据的Http请求方法
Dec 28 Python
Django中自定义模型管理器(Manager)及方法
Sep 23 Python
Python3.7黑帽编程之病毒篇(基础篇)
Feb 04 Python
详解Python中pyautogui库的最全使用方法
Apr 01 Python
python 负数取模运算实例
Jun 03 Python
Django中ORM的基本使用教程
Dec 22 Python
pyspark对Mysql数据库进行读写的实现
Dec 30 Python
撤回我也能看到!教你用Python制作微信防撤回脚本
Jun 11 Python
Python一些基本的图像操作和处理总结
Jun 23 Python
python中validators库的使用方法详解
Sep 23 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 session_start()问题解疑(详细介绍)
2013/07/05 PHP
php实现俄罗斯乘法实例
2015/03/07 PHP
PHP基于面向对象实现的留言本功能实例
2018/04/04 PHP
启用OPCache提高PHP程序性能的方法
2019/03/21 PHP
BOOM vs RR BO5 第一场 2.14
2021/03/10 DOTA
添加到收藏夹代码(兼容几乎所有的浏览器)
2007/01/09 Javascript
javascript 自动转到命名锚记
2009/01/10 Javascript
Javascript图像处理—虚拟边缘介绍及使用方法
2012/12/27 Javascript
判断滚动条到底部的JS代码
2013/11/04 Javascript
jquery和javascript中如何将一元素的内容赋给另一元素
2014/01/09 Javascript
基于javascript实现动态显示当前系统时间
2016/01/28 Javascript
详谈JS中实现种子随机数及作用
2016/07/19 Javascript
JavaScript中const、var和let区别浅析
2016/10/11 Javascript
NodeJS学习笔记之Module的简介
2017/03/24 NodeJs
JS中cookie的使用及缺点讲解
2017/05/13 Javascript
基于layer.js实现收货地址弹框选择然后返回相应的地址信息
2017/05/26 Javascript
在vue中多次调用同一个定义全局变量的实例
2018/09/25 Javascript
三步实现ionic3点击退出app程序
2019/09/17 Javascript
[04:04]显微镜下的DOTA2第六期——电影级别的华丽团战
2014/06/20 DOTA
[58:12]Ti4第二日主赛事败者组 LGD vs iG 3
2014/07/21 DOTA
Python XML RPC服务器端和客户端实例
2014/11/22 Python
使用Python生成url短链接的方法
2015/05/04 Python
linux下python抓屏实现方法
2015/05/22 Python
Python中的anydbm模版和shelve模版使用指南
2015/07/09 Python
谈谈Python进行验证码识别的一些想法
2016/01/25 Python
python实现PID算法及测试的例子
2019/08/08 Python
html5自定义video标签的海报与播放按钮功能
2019/12/04 HTML / CSS
世界上最好的旅行夹克:BauBax
2018/12/23 全球购物
linux面试题参考答案(4)
2014/09/21 面试题
境外导游求职信
2014/02/27 职场文书
女生抽烟检讨书
2014/10/05 职场文书
2014年工作总结及2015工作计划
2014/12/12 职场文书
北京英文导游词
2015/02/12 职场文书
2015年学校信息技术工作总结
2015/05/25 职场文书
使用canvas实现雪花飘动效果的示例代码
2021/03/30 HTML / CSS
MySQL系列之八 MySQL服务器变量
2021/07/02 MySQL