加入滑桿 ( Trackbar )
滑桿 ( Trackbar ) 又稱作滑動條、Slider bar,是一種可以用滑鼠調整數值的 UI 介面,這篇教學會介紹如何在 OpenCV 視窗中加入滑桿,並讀取滑桿數值,進一步調整影像的亮度和對比度。
快速導覽:
因為程式中的 OpenCV 會需要使用鏡頭或 GPU,所以請使用本機環境 ( 參考:使用 Python 虛擬環境 ) 或使用 Anaconda Jupyter 進行實作 ( 參考:使用 Anaconda ) ,並安裝 OpenCV 函式庫 ( 參考:OpenCV 函式庫 )。
在視窗中加入滑桿
透過 cv2.createTrackbar 方法,能夠 OpenCV 產生的指定視窗中加入滑桿,搭配 cv2.setTrackbarPos 方法,可以指定特定滑桿的初始值,使用方法如下:
cv2.createTrackbar('滑桿名稱', '視窗名稱', min, max, fn)
# min 最小值 ( 最小為 0,不可為負值 )
# max 最大值
# fn 滑桿數值改變時要執行的函式
cv2.setTrackbarPos('滑桿名稱','視窗名稱', val)
# val 滑桿預設值
下方的程式碼會在視窗中加入一個數值區間為 0~255 的滑桿,當滑鼠調整滑桿時,就會印出對應的數值。
import cv2
img = cv2.imread('mona.jpg')
cv2.imshow('oxxostudio', img)
def test(val):
print(val)
cv2.createTrackbar('test', 'oxxostudio', 0, 255, test)
cv2.setTrackbarPos('test', 'oxxostudio', 50)
keycode = cv2.waitKey(0)
cv2.destroyAllWindows()
透過滑桿,調整影像亮度與對比度
延伸「調整影像的對比和亮度」範例,將程式修改為調整滑桿時,可以調整影像的亮度和對比度。
import cv2
img = cv2.imread('mona.jpg')
cv2.imshow('oxxostudio', img)
contrast = 0 # 初始化要調整對比度的數值
brightness = 0 # 初始化要調整亮度的數值
cv2.imshow('oxxostudio', img)
# 定義調整亮度對比的函式
def adjust(i, c, b):
output = i * (c/100 + 1) - c + b # 轉換公式
output = np.clip(output, 0, 255)
output = np.uint8(output)
cv2.imshow('oxxostudio', output)
# 定義調整亮度函式
def brightness_fn(val):
global img, contrast, brightness
brightness = val - 100
adjust(img, contrast, brightness)
# 定義調整對比度函式
def contrast_fn(val):
global img, contrast, brightness
contrast = val - 100
adjust(img, contrast, brightness)
cv2.createTrackbar('brightness', 'oxxostudio', 0, 200, brightness_fn) # 加入亮度調整滑桿
cv2.setTrackbarPos('brightness', 'oxxostudio', 100)
cv2.createTrackbar('contrast', 'oxxostudio', 0, 200, contrast_fn) # 加入對比度調整滑桿
cv2.setTrackbarPos('contrast', 'oxxostudio', 100)
keycode = cv2.waitKey(0)
cv2.destroyAllWindows()
意見回饋
如果有任何建議或問題,可傳送「意見表單」給我,謝謝~