使用HSV 顏色空間在OpenCV 中增強紅色檢測
本文旨在提高使用OpenCV 的HSV 影像中紅色檢測的準確性顏色空間。
問題:
使用 cv::inRange 和 HSV 顏色空間檢測影像中的紅色矩形目前產生的結果不令人滿意。期望的結果是有效地隔離紅色矩形。
解:
在 HSV 中,紅色跨越值 180 周圍的範圍。這樣,HSV 範圍應包含 [0,10] 和 [170, 180] 中的值。
程式碼更新:
以下程式碼片段示範了更新後的程式碼方法:
# Include OpenCV library import cv2 # Define HSV range for red color H_MIN1 = 0 H_MAX1 = 10 H_MIN2 = 170 H_MAX2 = 180 S_MIN = 70 S_MAX = 255 V_MIN = 50 V_MAX = 255 # Read the input image image = cv2.imread('image.png') # Convert to HSV color space hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV) # Create masks for the two ranges of red hue mask1 = cv2.inRange(hsv, (H_MIN1, S_MIN, V_MIN), (H_MAX1, S_MAX, V_MAX)) mask2 = cv2.inRange(hsv, (H_MIN2, S_MIN, V_MIN), (H_MAX2, S_MAX, V_MAX)) # Combine the masks mask = cv2.bitwise_or(mask1, mask2) # Display the resulting mask cv2.imshow('Mask', mask) cv2.waitKey(0)
替代方法:青色偵測
另一個有效的方法是反轉BGR 影像,將其轉換為HSV,並隔離青色(互補色)為紅色)。這樣就無需檢查多個色調範圍。
青色偵測程式碼:
# Invert the BGR image inverted = 255 - image # Convert to HSV color space hsv_inverted = cv2.cvtColor(inverted, cv2.COLOR_BGR2HSV) # Isolate cyan color cyan_mask = cv2.inRange(hsv_inverted, (90-10, S_MIN, V_MIN), (90+10, S_MAX, V_MAX)) # Display the cyan mask cv2.imshow('Cyan Mask', cyan_mask) cv2.waitKey(0)
以上是我們如何使用 HSV 色彩空間增強 OpenCV 中的紅色偵測?的詳細內容。更多資訊請關注PHP中文網其他相關文章!