如何使用 OpenCV Python 建立一個作為 HSV 顏色調色盤的軌跡條?
為了在OpenCV中建立作為HSV(色相、飽和度和明度)顏色調色盤的軌跡條,我們應用了兩個不同的函式。這些函式是cv2.createTrackbar()和cv2.getTrackbarPos()
cv2.createTrackbar()函式用於建立軌跡條,而cv2.getTrackbarPos()函式用於訪問所選軌跡條位置的值。
使用這兩個函式,我們建立了一個包含H、S、V顏色軌跡條和一個顯示所選顏色的顏色視窗的視窗。透過更改軌跡條的位置,我們可以選擇特定的顏色值。
H的範圍在0到179之間,而S和V的範圍在0到255之間。
語法
cv2.createTrackbar(trackbar_name, window_name, default_value, max_value, callback_func) cv2.getTrackbarPos(trackbar_name, window_name)
引數
trackbar_name − 它是軌跡條的名稱。此名稱用於訪問軌跡條位置值。
window_name − 它是附加軌跡條的視窗的名稱。
default_value − 為軌跡條設定的預設值。
max_value − 軌跡條的最大值。
callback_func − 當軌跡條值更改時執行的函式。
步驟
要建立作為HSV顏色調色盤的軌跡條,可以按照以下步驟操作:
第一步是匯入所需的庫。所需的 Python 庫是OpenCV和NumPy。確保您已安裝它們。
import cv2 import numpy as np
接下來定義一個回撥函式。它以軌跡條位置作為預設引數。我們定義此函式不做任何事情。
def nothing(x): pass
定義黑色影像並建立一個名為HSV顏色調色盤的視窗。軌跡條和顏色將在此視窗中顯示。
img = np.zeros((300,650,3), np.uint8) window_name = 'Trackbar Color Palette' cv2.namedWindow(window_name, cv2.WINDOW_AUTOSIZE)
建立用於顏色更改的軌跡條,傳遞所有五個引數
cv2.createTrackbar('H',window_name,0,179,nothing) cv2.createTrackbar('S',window_name,0,255,nothing) cv2.createTrackbar('V',window_name,0,255,nothing)
獲取所有三個HSV顏色的當前軌跡條位置。
h = cv2.getTrackbarPos('H',window_name) s = cv2.getTrackbarPos('S',window_name) v = cv2.getTrackbarPos('V',window_name)
更新上述顏色的顏色影像視窗。並將影像顏色轉換為BGR。
img[:] = [h,s,v] img = cv2.cvtColor(img, cv2.COLOR_HSV2BGR)
現在在顏色影像視窗中顯示所選軌跡條值的顏色。
while(True): cv2.imshow(window_name,img) k = cv2.waitKey(1) & 0xFF if k == ord('q'): break
示例 1
在這個 Python 程式中,我們建立了一個視窗作為顏色調色盤。我們為 R、G 和 B 顏色建立了三個軌跡條。滑動軌跡條,您將在顏色視窗中看到相應的顏色。
# import required libraries import cv2 import numpy as np def nothing(x): pass # Create a black image, a window img = np.zeros((300,650,3), np.uint8) img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) window_name = 'HSV Color Palette' cv2.namedWindow(window_name, cv2.WINDOW_AUTOSIZE) # create trackbars for color change cv2.createTrackbar('H',window_name,0,179,nothing) cv2.createTrackbar('S',window_name,0,255,nothing) cv2.createTrackbar('V',window_name,0,255,nothing) while(True): cv2.imshow(window_name,img) key = cv2.waitKey(1) & 0xFF if key == ord('q'): break # get current positions of four trackbars h = cv2.getTrackbarPos('H',window_name) s = cv2.getTrackbarPos('S',window_name) v = cv2.getTrackbarPos('V',window_name) img[:] = [h,s,v] img = cv2.cvtColor(img, cv2.COLOR_HSV2BGR) cv2.destroyAllWindows()
輸出
執行上述程式時,它將顯示以下輸出視窗。要關閉輸出視窗,請按“q”鍵。
所有三個軌跡條的預設值為0,視窗的顏色為黑色。滑動軌跡條,您將在顏色視窗中看到相應的顏色。
示例 2
在此程式中,我們建立了一個視窗作為HSV顏色調色盤,其中包含一個開關按鈕。我們建立了四個軌跡條,三個用於HSV顏色,一個用於開關按鈕。
當開關按鈕開啟時,顏色影像中的顏色才會顯示。滑動軌跡條,您將在顏色視窗中看到相應的顏色。
import cv2 import numpy as np def nothing(x): pass # Create a black image, a window img = np.zeros((300,650,3), np.uint8) img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) window_name = 'HSV Color Palette' cv2.namedWindow(window_name, cv2.WINDOW_AUTOSIZE) # create trackbars for color change cv2.createTrackbar('H',window_name,0,179,nothing) cv2.createTrackbar('S',window_name,0,255,nothing) cv2.createTrackbar('V',window_name,0,255,nothing) # create switch for ON/OFF functionality # switch = '0 : OFF \n1 : ON' cv2.createTrackbar('switch', window_name,0,1,nothing) while(True): cv2.imshow(window_name,img) key = cv2.waitKey(1) & 0xFF if key == ord('q'): break # get current positions of four trackbars h = cv2.getTrackbarPos('H',window_name) s = cv2.getTrackbarPos('S',window_name) v = cv2.getTrackbarPos('V',window_name) sw = cv2.getTrackbarPos('switch',window_name) if sw == 0: img[:] = 0 else: img[:] = [h,s,v] img = cv2.cvtColor(img, cv2.COLOR_HSV2BGR) cv2.destroyAllWindows()
輸出
執行上述程式時,它將顯示以下輸出視窗。要關閉輸出視窗,請按“q”鍵。
所有軌跡條的預設值為0。視窗的顏色為黑色。當您開啟開關(將其選擇為1)並滑動HSV顏色軌跡條到所需的值時,視窗的顏色將對應於設定的值。對於亮色,為S和V軌跡條選擇最大值,然後滑動H軌跡條。
當開關關閉時滑動軌跡條,不會有任何變化
如果在開關關閉(設定為 0)時滑動軌跡條,則視窗的顏色不會發生變化。它將保持原樣(即黑色)。