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