Python程式設計 簡單的影象處理(1)
阿新 • • 發佈:2018-11-11
Python程式設計 簡單的影象處理(1)
1.寫個濾鏡
照片照的好,不如濾鏡用得好!一款好的濾鏡軟體可以讓照片呈現不一樣的風格乃至風情,修理照片需要揚長避短達到最佳效果。可是濾鏡款式千百種,卻沒有一款專門為你設計??不如自己來寫個濾鏡吧!
1.先上一張圖:
藉助Python的兩個第三方庫:1.numpy 2.PIL
【例項1】:影象的顏色交換
交換影象中的顏色。可以通過分離RGB圖片的3個顏色通道實現顏色交換。程式碼如下:
from PIL import Image im=Image.open('C:\\Users\\Administrator\\Desktop\\birdnest.jpg') r,g,b=im.split() #獲得RGB通道資料 om=Image.merge(“RGB”,(b,g,r))#將3個通道合成新的影象 om.show()
程式碼執行效果如下:
【例項2】影象輪廓的獲取
讓北京鳥巢變得更加抽象,更具想象空間。
程式碼如下:
from PIL import Image
from PIL import ImageFilter
im=Image.open('C:\\Users\\Administrator\\Desktop\\birdnest.jpg')
om=im.filter(ImageFilter.CONTOUR)
om.save('birdnestContour.jpg')
程式碼執行效果如下:
前面講到影象輪廓提取,原影象在視覺上更加立體,獲得的輪廓影象缺乏立體感,光線照射使立體物出現明暗變化,運用這個原理是空間素描的基本方法,通過Python程式增加深淺層次變化,從而使影象輪廓更富立體感、空間感和色澤感,接近人類手繪效果。
依舊是先上一張圖:
手繪效果程式碼如下:
from PIL import Image import numpy as np vec_el=np.pi/2.2 #光源的俯視角度 vec_az=np.pi/4 #光源的方位角度 depth=10 #(0--100) im=Image.open('C:\\Users\\Administrator\\Desktop\\QQ截圖20180915233103.png').convert('L') a=np.asarray(im).astype('float') grad=np.gradient(a) #獲取影象的灰度的梯度值 grad_x,grad_y=grad #分別獲取橫縱影象梯度值 grad_x=grad_x*depth/100 grad_y=grad_y*depth/100 dx=np.cos(vec_el)*np.cos(vec_az)#光源對X軸的影響 dy=np.cos(vec_el)*np.sin(vec_az)#光源對Y軸的影響 dz=np.sin(vec_el) #光源對Z軸的影響 A=np.sqrt(grad_x**2+grad_y**2+1.) uni_x=grad_x/A uni_y=grad_y/A uni_z=1./A a2=255*(dx*uni_x+dy*uni_y+dz*uni_z)#光源歸一化 a2=a2.clip(0,255) pil_im2=Image.fromarray(a2.astype('uint8'))#重構影象 pil_im2.show()
手繪影象的基本思想是利用畫素之間的梯度值重構每個畫素值,這種空間座標變化相當於給物體加上一個虛擬光源,根據灰度值大小模擬各部分相對於人視角的遠近程度,使畫面顯得有“深度”。
通過改變梯度值賦權值depth,depth較小時,背景區域接近白色,畫面顯示輪廓描繪,depth較大時,整體畫面灰度值較深,近似於浮雕效果。