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