在 Python 中使用 OpenCV 的 HSV 顏色空間

在程式設計中處理影象時,我們將它們轉換為具有數值的變數並處理這些值。每個影象都可以有一些想要的顏色。
我們使用顏色模型將這些顏色對映到數值。一些常見的顏色模型是 RGB、CMYK、HSV 等。
我們可以使用 opencv
庫在 Python 中處理和處理影象和視訊。這個庫充滿了可以為影象實現複雜演算法和技術的函式。
本教程將討論 opencv
庫中的 HSV 顏色空間。
HSV 顏色空間
預設情況下,RGB 顏色模型表示影象中的顏色。這是因為 RGB 是圖形中最常用的顏色模型,可以表示範圍廣泛的顏色。
然而,最有用的模型之一是 HSV 模型。
HSV 模型用於以圓柱形表示 RGB 模型的顏色範圍。該色彩空間高度用於物件跟蹤。
HSV 顏色模型代表 Hue
、Saturation
和 Brightness (Value
)。
Hue
屬性用於指定正在使用的顏色的色調,Saturation
屬性確定使用顏色的量。Value
屬性用於指定顏色的亮度。
在 OpenCV 中將影象轉換為 HSV 顏色空間
使用 opencv
庫,我們可以將影象從一種顏色空間轉換為另一種顏色空間。為此,我們使用 cvtColor()
函式。
當使用 imread()
函式讀取影象時,它位於 RGB 顏色空間中。我們可以使用 cvtColor()
函式將其轉換為 HSV。
請參閱以下示例。
import cv2
i = cv2.imread("deftstack.png")
img = cv2.cvtColor(i, cv2.COLOR_BGR2HSV)
cv2.imshow("Final", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
輸出:
在上面的示例中,請注意 cvtColor()
函式中指定的 cv2.BGR2HSV
屬性。它指定我們將影象從 RGB 顏色空間轉換為 HSV。
waitKey()
和 destroyAllWindows()
函式的組合用於等待使用者在關閉輸出視窗之前按下某個鍵。
cv2.BGR2HSV
將影象從 RGB 轉換為 HSV 範圍為 0 到 180。我們還可以使用 cv2.BR2HSV_FULL
將影象轉換為 HSV 範圍為 0 到 255 .
在 OpenCV 中使用 HSV 顏色空間檢測顏色
如前所述,此顏色空間的主要用途是用於物件跟蹤。我們可以使用這個模型來建立可以對映影象中某些特定顏色的蒙版。
HSV 模型中的每種顏色都有一定的顏色範圍。它們範圍的上限和下限可用於檢測顏色。
我們可以使用 inRange()
函式返回一個二進位制掩碼,該掩碼使用 HSV 顏色空間的上限和下限檢測給定顏色。
請參閱下面的程式碼。
import cv2
import numpy as np
img = cv2.imread("img3.jpeg")
hsv_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
bound_lower = np.array([25, 20, 20])
bound_upper = np.array([100, 255, 255])
mask_green = cv2.inRange(hsv_img, bound_lower, bound_upper)
cv2.imshow("Mask", mask_green)
cv2.waitKey(0)
cv2.destroyAllWindows()
輸出:
在上面的示例中,我們建立了一個二進位制掩碼來檢測影象中的綠色。影象被轉換為 HSV 顏色空間,並定義了綠色的範圍。
我們使用 inRange
函式的上限和下限來檢測顏色並返回掩碼。
可以將此蒙版對映到影象上以檢測顏色並繪製給定顏色的邊界。
まとめ
本教程討論了顏色空間,並專注於 opencv
中的 HSV 顏色空間。
我們首先討論了 HSV 顏色空間的基礎知識以及顏色在此模型中的對映方式。還強調了與常用 RGB 模型的區別。
我們還演示瞭如何使用 opencv
將影象轉換為 HSV。
HSV 顏色空間也用於物件跟蹤。我們討論瞭如何使用 opencv
庫中的 inRange
函式使用給定顏色的上限和下限來檢測給定影象中的顏色。
Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.
LinkedIn