Python灰度變換中伽馬變換分析實(shí)現(xiàn)
1. 介紹
伽馬變換主要目的是對比度拉伸,將圖像灰度較低的部分進(jìn)行修正
伽馬變換針對的是對單個像素點(diǎn)的變換,也就是點(diǎn)對點(diǎn)的映射
形式為:
其中,s為輸出的像素點(diǎn)的灰度值,r為輸入像素點(diǎn)的灰度值。c 、 γ 為常數(shù)
γ 值不同的時候,對應(yīng)的變換曲線如圖,這里我們不關(guān)注具體函數(shù)的取值,而只是關(guān)注變換曲線的形狀
通過觀察可以發(fā)現(xiàn)
- γ > 1 的時候,會壓縮暗區(qū)的對比度,抬高亮區(qū)的對比度。并且γ越大,效果越明顯
- γ < 1 的時候,會提升暗區(qū)的對比度,壓縮亮區(qū)的對比度。并且γ越小,效果越明顯
- γ = 1 的時候,圖像的灰度不變(c 也為1)
2. 代碼實(shí)現(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 的效果
這里需要進(jìn)行歸一化處理,因?yàn)檎麛?shù)的小數(shù)次方可能會丟失精度,我們將灰度值變?yōu)椋?,1)之間,轉(zhuǎn)換成小數(shù)與小數(shù)的次方會更加準(zhǔn)確。
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) # 將每一幀進(jìn)行進(jìn)行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灰度變換中伽馬變換分析實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Python伽馬變換內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
PHP實(shí)現(xiàn)發(fā)送和接收J(rèn)SON請求
本篇文章給大家分享了PHP實(shí)現(xiàn)發(fā)送和接收J(rèn)SON請求的詳細(xì)方法和實(shí)例代碼,有興趣的朋友可以參考學(xué)習(xí)下。2018-06-06

Python MySQL數(shù)據(jù)庫連接池組件pymysqlpool詳解

10行Python代碼計算汽車數(shù)量的實(shí)現(xiàn)方法

python3.4實(shí)現(xiàn)郵件發(fā)送功能