Python灰度變換中伽馬變換分析實現
1. 介紹
伽馬變換主要目的是對比度拉伸,將圖像灰度較低的部分進行修正
伽馬變換針對的是對單個像素點的變換,也就是點對點的映射
形式為:
其中,s為輸出的像素點的灰度值,r為輸入像素點的灰度值。c 、 γ 為常數
γ 值不同的時候,對應的變換曲線如圖,這裡我們不關註具體函數的取值,而隻是關註變換曲線的形狀
通過觀察可以發現
- γ > 1 的時候,會壓縮暗區的對比度,抬高亮區的對比度。並且γ越大,效果越明顯
- γ < 1 的時候,會提升暗區的對比度,壓縮亮區的對比度。並且γ越小,效果越明顯
- γ = 1 的時候,圖像的灰度不變(c 也為1)
2. 代碼實現
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 的效果
這裡需要進行歸一化處理,因為整數的小數次方可能會丟失精度,我們將灰度值變為(0,1)之間,轉換成小數與小數的次方會更加準確。
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) # 將每一幀進行進行grammar變換 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()
視頻效果:
到此這篇關於Python灰度變換中伽馬變換分析實現的文章就介紹到這瞭,更多相關Python伽馬變換內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- 利用python調用攝像頭的實例分析
- python通過opencv調用攝像頭操作實例分析
- Python OpenCV讀取視頻報錯的問題解決
- 如何使用Python的OpenCV庫處理圖像和視頻
- opencv-python圖像處理安裝與基本操作方法