本文实例讲述了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相关内容感兴趣的读者可查看本站专题:《Python图片操作技巧总结》、《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》
希望本文所述对大家Python程序设计有所帮助。
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?
更新动态
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]