Python实现PS图像调整黑白效果示例
作者:Matrix_11 发布时间:2022-08-06 09:15:13
本文实例讲述了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程序设计有所帮助。
来源:http://blog.csdn.net/matrix_space/article/details/72285588
猜你喜欢
- 本文实例讲述了Python求解平方根的方法。分享给大家供大家参考。具体如下:主要通过SICP的内容改写而来。基于newton method求
- turtle库是python的基础绘图库,官方手册这个库被介绍为一个最常用的用来给孩子们介绍编程知识的方法库,其主要是用于程序设计入门,是标
- 看如下asp代码:<%@ codepage="65001" %><!-- 
- 本文实例为大家分享了python实现决策树的具体代码,供大家参考,具体内容如下算法优缺点:优点:计算复杂度不高,输出结果易于理解,对中间值缺
- 前言由与上不了学,教我们Mastercam的老师提前给我们布置了4道习题。对我们太好了,谢谢老师�没办法,干就完了。只是要求附上制作过程视频
- 下面是一个实战项目的结果。 #coding: utf-8 import Image,ImageDraw,ImageFont,os,strin
- 你写了一个Python 3程序,还想要它适用于其他语言。你能复制全部代码库,然后刻意地检查每个.py文件,替换掉所有找到的文本字符串。但这意
- 我们之前看到了函数和对象。从本质上来说,它们都是为了更好的组织已经有的程序,以方便重复利用。模块(module)也是为了同样的目的。在Pyt
- 一般的防止被框架方式或者被框架后自动转向,方法如下: if (top.location != self.loc
- 本文实例为大家分享了python实现库存商品管理系统的具体代码,供大家参考,具体内容如下题目要求:请设计一个商品管理系统,程序要求根据用户输
- view视图import reimport osimport mimetypesfrom wsgiref.util import FileW
- 目录1. 安装方法2. 简单示例3. 兼容字典的所有操作4. 设置返回默认值5. 工厂函数自动创建key6. 序列化的支持字典是 Pytho
- 目录[redis 调用Lua脚本](#redis 调用Lua脚本)[redis+lua 实现评分排行榜实时更新](#redis+lua 实现
- 在异步应用程序中发送和接收信息时,可以选择以纯文本和 XML 作为数据格式。掌握 Ajax 的这一期讨论另一种有用的数据格式 JavaScr
- Flask-WTF扩展可以把处理web表单的过程变成一种愉悦的体验。一、跨站请求伪造保护默认情况下,Flask-WTF能够保护所有表单免受跨
- /r的用法与end=""用法 \r 表示将光标的位置回退到本行的开头位置end="" 意思
- 一、背景:nginx 的log 不会自动按天备份,而且记录时间格式不统一,此程序专门解决这两个问题;二、windows 部署方式1.在 ng
- 描述:使用QtDesignner设计界面,pyQt5+python3实现主体方法制作的猜数字游戏。游戏规则:先选择游戏等级:初级、中级、高级
- 本文阐述了网页设计中的十大诀窍,作为网页开发者我们应该注意,这样才能最大限度得发挥网站的功能和效益: 预早筹划设计主页未必很艰难。
- 内容摘要:本文详细介绍了SQL Server导入导出数据的方法:(1)导出导入SQL Server里某个数据库,(2)导