首頁  >  文章  >  後端開發  >  如何使用 HSV 色彩空間在 OpenCV 中實現更精確的紅色檢測?

如何使用 HSV 色彩空間在 OpenCV 中實現更精確的紅色檢測?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-22 08:53:10233瀏覽

How can I achieve more precise red color detection in OpenCV using HSV color space?

使用HSV 顏色空間改進OpenCV 的紅色檢測

在OpenCV 中,HSV 顏色空間提供了一種有效的方法來檢測特定顏色,包括紅色。然而,由於 HSV 中色調通道的圓形特性,紅色可以圍繞著接近 180 度的值。這可能會給準確檢測紅色物體帶來挑戰。

為了解決這個問題,可以透過考慮色調分量的兩個範圍來實現更精確的檢測:[0,10] 和 [170, 180]。透過包含這兩個範圍,我們確保偵測覆蓋整個紅色色譜。

以下 Python 程式碼示範了這個方法:

import cv2

# Read the input image
image = cv2.imread("path_to_image")

# Convert BGR to HSV color space
hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)

# Define HSV values for red color
hue_min1 = 0
hue_max1 = 10
hue_min2 = 170
hue_max2 = 180
sat_min = 70
sat_max = 255
val_min = 50
val_max = 255

# Create masks for the two hue ranges
mask1 = cv2.inRange(hsv, (hue_min1, sat_min, val_min), (hue_max1, sat_max, val_max))
mask2 = cv2.inRange(hsv, (hue_min2, sat_min, val_min), (hue_max2, sat_max, val_max))

# Combine the masks
mask = mask1 | mask2

# Display the mask
cv2.imshow("Mask", mask)
cv2.waitKey(0)
cv2.destroyAllWindows()

此程式碼有效地偵測影像中的紅色矩形,如遮罩輸出所示。

替代方法

另一種方法方法是將BGR影像反轉,然後轉換為HSV。這種方法本質上是搜尋互補色青色(色調通道上的 90 度),使您可以在單一範圍內檢測紅色。

以下Python 程式碼示範了此技術:

import cv2

# Read the input image
image = cv2.imread("path_to_image")

# Invert the BGR image
inverted_image = cv2.bitwise_not(image)

# Convert inverted image to HSV color space
hsv_inverted = cv2.cvtColor(inverted_image, cv2.COLOR_BGR2HSV)

# Define HSV values for cyan color (inverted red)
hue_min = 90 - 10
hue_max = 90 + 10
sat_min = 70
sat_max = 255
val_min = 50
val_max = 255

# Create a mask for the cyan color range
mask = cv2.inRange(hsv_inverted, (hue_min, sat_min, val_min), (hue_max, sat_max, val_max))

# Display the mask
cv2.imshow("Mask", mask)
cv2.waitKey(0)
cv2.destroyAllWindows()

這兩種方法都在HSV 色彩空間中使用OpenCV 改進了紅色檢測,為影像處理應用程式提供了更準確的結果。

以上是如何使用 HSV 色彩空間在 OpenCV 中實現更精確的紅色檢測?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn