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 25 Python
Python爬虫:通过关键字爬取百度图片
Feb 17 Python
浅析Git版本控制器使用
Dec 10 Python
Python with语句上下文管理器两种实现方法分析
Feb 09 Python
Python双向循环链表实现方法分析
Jul 30 Python
python实现AES和RSA加解密的方法
Mar 28 Python
对django后台admin下拉框进行过滤的实例
Jul 26 Python
解决pandas展示数据输出时列名不能对齐的问题
Nov 18 Python
使用Django和Postgres进行全文搜索的实例代码
Feb 13 Python
Python+Appium实现自动化测试的使用步骤
Mar 24 Python
8种常用的Python工具
Aug 05 Python
python引入其他文件夹下的py文件具体方法
May 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文件上传的例子及参数详解
2013/12/12 PHP
Zend Framework教程之响应对象的封装Zend_Controller_Response实例详解
2016/03/07 PHP
php获取本机真实IP地址实例代码
2016/03/31 PHP
PHP join()函数用法与实例讲解
2019/03/11 PHP
jquery 模拟雅虎首页的点击对话框效果
2010/04/11 Javascript
JavaScript中的闭包(Closure)详细介绍
2014/12/30 Javascript
JavaScript控制listbox列表框的项目上下移动的方法
2015/03/18 Javascript
JS实现简单路由器功能的方法
2015/05/27 Javascript
JS简单实现点击复制链接的方法
2016/08/03 Javascript
JS控制页面跳转时未请求要跳转的地址怎么回事
2016/10/14 Javascript
Restify中接入Socket.io报Error:Can’t set headers的错误解决
2017/03/28 Javascript
微信小程序自定义底部弹出框
2020/11/16 Javascript
Angular5集成eventbus的示例代码
2018/07/19 Javascript
Vue 监听列表item渲染事件方法
2018/09/06 Javascript
angular 用Observable实现异步调用的方法
2018/12/27 Javascript
vue-cli 3.x配置跨域代理的实现方法
2019/04/12 Javascript
JavaScript实现美化滑块效果
2019/05/17 Javascript
vue实现前台列表数据过滤搜索、分页效果
2019/05/28 Javascript
深入理解javascript prototype的相关知识
2019/09/19 Javascript
jquery弹窗时禁止body滚动条滚动的例子
2019/09/21 jQuery
小程序登录之支付宝授权的实现示例
2019/12/13 Javascript
python字典排序实例详解
2015/05/20 Python
Python 中urls.py:URL dispatcher(路由配置文件)详解
2017/03/24 Python
Python正则表达式经典入门教程
2017/05/22 Python
python 限制函数执行时间,自己实现timeout的实例
2019/01/12 Python
美国网上花店:JustFlowers
2017/02/12 全球购物
美国帽子俱乐部商店:Hat Club
2019/07/05 全球购物
Mybag美国/加拿大:英国奢华包包和名牌手袋网站
2020/02/16 全球购物
中学生国旗下讲话稿
2014/04/26 职场文书
优秀教师感人事迹材料
2014/05/04 职场文书
高一新生军训方案
2014/05/12 职场文书
承诺书格式
2014/06/03 职场文书
医药公司采购员岗位职责
2015/04/03 职场文书
单位工作证明范本
2015/06/15 职场文书
职工食堂管理制度
2015/08/06 职场文书
springboot集成redis存对象乱码的问题及解决
2022/06/16 Java/Android