1. 程式人生 > >Python-OpenCV——亮度和對比度

Python-OpenCV——亮度和對比度

import 調整 right png display 應用 lan mouse ofo

亮度與對比度

亮度調整是將圖像像素的強度整體變大/變小,對比度調整指的是圖像暗處變得更暗,亮出變得更亮,從而拓寬某個區域內的顯示精度。

OpenCV中亮度和對比度應用這個公式來計算:g(x) = αf(x) + β,其中:α(>0)、β常稱為增益與偏置值,分別控制圖片的對比度和亮度。

註:此處對α/β控制對比度和亮度有爭議,具體請參考:OpenCV關於對比度和亮度的誤解
img = cv2.imread(lena.jpg)
# 此處需註意,請參考後面的解釋
res = np.uint8(np.clip((1.5 * img + 10), 0, 255))
tmp 
= np.hstack((img, res)) # 兩張圖片橫向合並(便於對比顯示) cv2.imshow(image, tmp) cv2.waitKey(0)

還記得圖像混合那一節中numpy對數據溢出的取模處理嗎?250+10 = 260 => 260%256=4,它並不適用於我們的圖像處理,所以用np.clip()函數將數據限定:a<0 => a=0, a>255 => a=255

技術分享圖片

做個小練習吧!創建兩個滑動條分別調整對比度和亮度(對比度範圍:0~0.3, 亮度0~100)。提示:因為滑動條沒有小數,所以可以設置為0~300,然後乘以0.01

import
cv2 import numpy as np alpha = 0.3 beta = 80 img_path = "./a.png" img = cv2.imread(img_path) img2 = cv2.imread(img_path) def updateAlpha(x): global alpha,img,img2 alpha = cv2.getTrackbarPos(Alpha,image) alpha = alpha * 0.01 img = np.uint8(np.clip((alpha * img2 + beta), 0, 255))
def updateBeta(x): global beta,img,img2 beta = cv2.getTrackbarPos(Beta,image) img = np.uint8(np.clip((alpha * img2 + beta), 0, 255)) # 創建窗口 cv2.namedWindow(image) cv2.createTrackbar(Alpha,image,0,300,updateAlpha) cv2.createTrackbar(Beta,image,0,255,updateBeta) cv2.setTrackbarPos(Alpha,image,100) cv2.setTrackbarPos(Beta,image,10) # 設置鼠標事件回調 #cv2.setMouseCallback(‘image‘,update) while(True): cv2.imshow(image,img) if cv2.waitKey(1) == ord(q): break cv2.destroyAllWindows()

代碼就不解釋了,不了解的可參考這個教程:Python-OpenCV基礎入門——滑動條組件(非常簡明易懂)

參考鏈接:https://www.jianshu.com/p/a23653f8b26b

Python-OpenCV——亮度和對比度