Python-OpenCV——亮度和對比度

亮度計算:Y(亮度) = 0.299*R + 0.587*G + 0.114*Bhtml

也能夠根據這個計算亮度:python

https://blog.csdn.net/cruoni/article/details/85110289函數

 

亮度與對比度

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

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

注:此處對α/β控制對比度和亮度有爭議,具體請參考:OpenCV關於對比度和亮度的誤解.net

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=255code

 

作個小練習吧!建立兩個滑動條分別調整對比度和亮度(對比度範圍:0~0.3, 亮度0~100)。提示:由於滑動條沒有小數,因此能夠設置爲0~300,而後乘以0.01htm

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基礎入門——滑動條組件(很是簡明易懂)blog

相關文章
相關標籤/搜索