點贊 + 關注 + 收藏 = 學會了
推薦關注 《OpenCV-Python專欄》
在 OpenCV 中,Trackbar 控件(滑塊)是一個非常常用的 GUI 組件,用於在圖像處理和計算機視覺任務中進行交互式調整參數。比如説,加載一個圖片,通過一個滑塊調整圖片的亮度,這樣便於我們用肉眼觀察圖片的變化。
Trackbar 允許用户通過拖動滑塊來調整參數的值,並且會實時更新顯示結果。
比如上圖這個例子,創建了3個 Trackbar 控件分別控制圖片的 R、G、B 三個通道。拖拽不同通道的滑塊後,圖片對應的顏色也會跟着修改。
在 OpenCV 中使用 Trackbar 需要用到2個方法:cv2.createTrackbar() 和 cv2.getTrackbarPos()。
創建滑塊控件
cv2.createTrackbar() 用於創建一個滑塊(Trackbar)控件,它接受5個參數。
cv2.createTrackbar(trackbarname, winname, value, count, onChange)
trackbarname:滑塊的名稱(字符串),在窗口中顯示。winname:窗口的名稱,滑塊將被添加到這個窗口中。這個窗口必須在調用cv2.createTrackbar()之前通過cv2.namedWindow()創建。value:滑塊的初始值(整數),表示滑塊的默認位置。count:滑塊的最大值(整數),表示滑塊的可調範圍。例如,設置為 255 表示滑塊的範圍是 0 到 255。onChange:回調函數。當滑塊值發生變化時,onChange 函數會被調用。它接收滑塊的新值作為參數。如果不需要回調函數,可以傳入一個空函數 nothing()。
獲取滑塊當前值
cv2.getTrackbarPos() 用於獲取滑塊的當前位置(即當前的值),它接受2個參數。
cv2.getTrackbarPos(trackbarname, winname)
trackbarname:要獲取值的滑塊名稱。該名稱必須與創建滑塊時使用的名稱一致。winname:包含滑塊的窗口名稱。該窗口應該已經通過cv2.namedWindow()創建。
舉個例子
使用 numpy 要創建一個 480 x 640 像素的圖片,這個圖片每個像素有3個通道,分別代表R(紅)、G(綠)、B(藍)。用鼠標滑動滑塊後,圖片每個像素的顏色值也會隨之發生變化。
import cv2
import numpy as np
# 初始化默認的RGB通道值
r = 0
g = 0
b = 0
# 回調函數,當滑塊值變化時觸發
def nothing(x):
pass
# 創建一個窗口
cv2.namedWindow('RGB Control')
# 創建三個滑塊,分別控制 RGB 通道的值
cv2.createTrackbar('Red', 'RGB Control', 0, 255, nothing)
cv2.createTrackbar('Green', 'RGB Control', 0, 255, nothing)
cv2.createTrackbar('Blue', 'RGB Control', 0, 255, nothing)
# 循環顯示窗口,實時更新 TrackBar 的值
while True:
# 獲取滑塊的當前值
r = cv2.getTrackbarPos('Red', 'RGB Control')
g = cv2.getTrackbarPos('Green', 'RGB Control')
b = cv2.getTrackbarPos('Blue', 'RGB Control')
# 創建一個新的圖像,初始為全黑(0, 0, 0)
img = np.zeros((480, 640, 3), dtype=np.uint8)
# 設置圖像的RGB通道值
img[:, :, 0] = b # 藍色通道
img[:, :, 1] = g # 綠色通道
img[:, :, 2] = r # 紅色通道
# 顯示圖像
cv2.imshow('RGB Control', img)
# 按 'ESC' 鍵退出
if cv2.waitKey(1) & 0xFF == 27:
break
# 關閉窗口
cv2.destroyAllWindows()
需要注意,在 OpenCV 中,圖片裏的像素通道排序是 [B, G, R],和我們平時説的“RGB”排序是反過來的。切記切記。
點贊 + 關注 + 收藏 = 學會了