1. 程式人生 > >Python程式設計 簡單的影象處理(1)

Python程式設計 簡單的影象處理(1)

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較大時,整體畫面灰度值較深,近似於浮雕效果。
在這裡插入圖片描述
在這裡插入圖片描述