使用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中文網其他相關文章!