首页 > 后端开发 > C++ > 我们如何使用 HSV 颜色空间增强 OpenCV 中的红色检测?

我们如何使用 HSV 颜色空间增强 OpenCV 中的红色检测?

Patricia Arquette
发布: 2024-11-12 05:06:02
原创
787 人浏览过

How can we enhance red color detection in OpenCV using HSV color space?

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板