如何使用 OpenCV Python 建立一個作為 HSV 顏色調色盤的軌跡條?


為了在OpenCV中建立作為HSV(色相、飽和度和明度)顏色調色盤的軌跡條,我們應用了兩個不同的函式。這些函式是cv2.createTrackbar()cv2.getTrackbarPos()

  • cv2.createTrackbar()函式用於建立軌跡條,而cv2.getTrackbarPos()函式用於訪問所選軌跡條位置的值。

  • 使用這兩個函式,我們建立了一個包含H、S、V顏色軌跡條和一個顯示所選顏色的顏色視窗的視窗。透過更改軌跡條的位置,我們可以選擇特定的顏色值。

  • H的範圍在0179之間,而SV的範圍在0255之間。

語法

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 庫是OpenCVNumPy。確保您已安裝它們。

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顏色軌跡條到所需的值時,視窗的顏色將對應於設定的值。對於亮色,為SV軌跡條選擇最大值,然後滑動H軌跡條。

當開關關閉時滑動軌跡條,不會有任何變化

如果在開關關閉(設定為 0)時滑動軌跡條,則視窗的顏色不會發生變化。它將保持原樣(即黑色)。

更新於:2022年9月27日

2K+ 瀏覽量

啟動您的職業生涯

透過完成課程獲得認證

開始學習
廣告