Python實現(xiàn)PS圖像調(diào)整黑白效果示例
本文實例講述了Python實現(xiàn)PS圖像調(diào)整黑白效果。分享給大家供大家參考,具體如下:
這里用Python 實現(xiàn) PS 里的圖像調(diào)整–黑白,PS 里的黑白并不是簡單粗暴的將圖像轉(zhuǎn)為灰度圖,而是做了非常精細的處理,具體的算法原理和效果圖可以參考附錄說明。
比起之前的程序,對代碼進行了優(yōu)化,完全用矩陣運算代替了 for 循環(huán),運算效率提升了很多。具體的代碼如下:
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 圖像調(diào)整算法——黑白
黑白調(diào)整
Photoshop CS的圖像黑白調(diào)整功能,是通過對紅、黃、綠、青、藍和洋紅等6種顏色的比例調(diào)節(jié)來完成的。能更精細地將彩色圖片轉(zhuǎn)換為高質(zhì)量的黑白照片。
Photoshop CS圖像黑白調(diào)整功能的計算公式為:
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:
%%%%% 程序?qū)崿F(xiàn)圖像的黑白調(diào)整功能 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運行結(jié)果如下:
原圖:
運行效果圖:
更多關于Python相關內(nèi)容感興趣的讀者可查看本站專題:《Python圖片操作技巧總結(jié)》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python Socket編程技巧總結(jié)》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python入門與進階經(jīng)典教程》及《Python文件與目錄操作技巧匯總》
希望本文所述對大家Python程序設計有所幫助。
- python中PS 圖像調(diào)整算法原理之亮度調(diào)整
- Python實現(xiàn) PS 圖像調(diào)整中的亮度調(diào)整
- Python實現(xiàn)PS圖像調(diào)整之對比度調(diào)整功能示例
- Python實現(xiàn)PS圖像調(diào)整顏色梯度效果示例
- Python實現(xiàn)PS圖像明亮度調(diào)整效果示例
- python 設置輸出圖像的像素大小方法
- python隨機在一張圖像上截取任意大小圖片的方法
- Python繪制并保存指定大小圖像的方法
- 用python 批量更改圖像尺寸到統(tǒng)一大小的方法
- 如何使用Python調(diào)整圖像大小
相關文章
Python如何使用print()函數(shù)輸出格式化字符串
Python中內(nèi)置的%操作符和format函數(shù),都可以用于格式化字符串,下面這篇文章主要給大家介紹了關于Python如何使用print()函數(shù)輸出格式化字符串的相關資料,需要的朋友可以參考下2021-08-08樹莓派使用USB攝像頭和motion實現(xiàn)監(jiān)控
這篇文章主要為大家詳細介紹了樹莓派使用USB攝像頭和motion實現(xiàn)監(jiān)控,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-06-06Python讀取Excel一列并計算所有對象出現(xiàn)次數(shù)的方法
這篇文章主要給大家介紹了關于Python讀取Excel一列并計算所有對象出現(xiàn)次數(shù)的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-09-09