Python灰度變換中伽馬變換分析實現(xiàn)
1. 介紹
伽馬變換主要目的是對比度拉伸,將圖像灰度較低的部分進行修正
伽馬變換針對的是對單個像素點的變換,也就是點對點的映射
形式為:
其中,s為輸出的像素點的灰度值,r為輸入像素點的灰度值。c 、 γ 為常數(shù)
γ 值不同的時候,對應(yīng)的變換曲線如圖,這里我們不關(guān)注具體函數(shù)的取值,而只是關(guān)注變換曲線的形狀

通過觀察可以發(fā)現(xiàn)
- γ > 1 的時候,會壓縮暗區(qū)的對比度,抬高亮區(qū)的對比度。并且γ越大,效果越明顯
- γ < 1 的時候,會提升暗區(qū)的對比度,壓縮亮區(qū)的對比度。并且γ越小,效果越明顯
- γ = 1 的時候,圖像的灰度不變(c 也為1)
2. 代碼實現(xiàn)
import cv2
import numpy as np
def grammar(x, r):
y = pow(x / 255 , r) * 255
return y.astype(np.uint8)
img = cv2.imread('./f.jpg',0)
img_grammar = grammar(img,0.6)
cv2.imshow('img',np.hstack((img,img_grammar)))
cv2.waitKey()
cv2.destroyAllWindows()原圖和 γ = 0.6 的效果

這里需要進行歸一化處理,因為整數(shù)的小數(shù)次方可能會丟失精度,我們將灰度值變?yōu)椋?,1)之間,轉(zhuǎn)換成小數(shù)與小數(shù)的次方會更加準確。
3. 提升視頻的亮度
import numpy as np
import cv2
def grammar(x , r): # grammar 變換
y = pow(x / 255 , r) * 255
return y.astype(np.uint8)
video = cv2.VideoCapture('./hand.mp4') # 讀取視頻
while video.isOpened(): # 如果視頻/攝像頭 讀取成功
ret,frame = video.read() # 讀取每一幀
img = grammar(frame,0.6) # 將每一幀進行進行g(shù)rammar變換
if ret == True : # 讀取到frame的話
cv2.imshow('img',np.hstack((frame,img)))
key=cv2.waitKey(1)
if key == ord('q'): # q 退出
break
if key == 32: # 空格鍵 暫停
cv2.waitKey(0)
continue
video.release()
cv2.destroyAllWindows()視頻效果:

到此這篇關(guān)于Python灰度變換中伽馬變換分析實現(xiàn)的文章就介紹到這了,更多相關(guān)Python伽馬變換內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python MySQL數(shù)據(jù)庫連接池組件pymysqlpool詳解
10行Python代碼計算汽車數(shù)量的實現(xiàn)方法

