首页 >后端开发 >Python教程 >如何使用 cv2.inRange 准确确定 OpenCV 中颜色检测的 HSV 边界?

如何使用 cv2.inRange 准确确定 OpenCV 中颜色检测的 HSV 边界?

Susan Sarandon
Susan Sarandon原创
2024-12-16 06:44:09768浏览

How to Accurately Determine HSV Boundaries for Color Detection in OpenCV using cv2.inRange?

在 OpenCV 中使用 cv2.inRange 确定用于颜色检测的 HSV 边界

当使用 OpenCV 中的 cv2.inRange 函数进行颜色检测时,它选择适当的 HSV(色调、饱和度、值)上下边界以准确识别目标至关重要颜色。

问题识别:

考虑包含带有橙色盖子的咖啡罐的图像示例,如下所示。

[图像带有橙色盖子的咖啡罐]

目标是确定 HSV 边界以隔离橙色盖子。最初尝试了 (18, 40, 90) 到 (27, 255, 255) 的范围,但得到了意想不到的结果。

解决方案 1:尺度转换

需要注意的是,不同的应用程序可能会使用不同的 HSV 值尺度。 OpenCV 使用 H: 0-179、S: 0-255、V: 0-255 的范围,而其他一些应用程序可能使用 H: 0-360、S: 0-100、V: 0-100 的范围。因此,有必要对 HSV 值进行相应的转换。

解决方案 2:颜色空间转换

OpenCV 使用 BGR(蓝、绿、红)颜色格式默认情况下,图像可能是 RGB(红、绿、蓝)格式。要将图像正确转换为 HSV,必须使用 cv2.COLOR_BGR2HSV 而不是 cv2.COLOR_RGB2HSV。

修订的代码:

import cv2
import numpy as np

image = cv2.imread('kaffee.png')

# Revised HSV boundaries considering scale conversion
ORANGE_MIN = np.array([5, 50, 50], np.uint8)
ORANGE_MAX = np.array([15, 255, 255], np.uint8)

# Convert image to HSV color space
hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)

# Apply color filtering
mask = cv2.inRange(hsv, ORANGE_MIN, ORANGE_MAX)

# Save the masked image
cv2.imwrite('kaffee_out.png', mask)

此修订的方法应该在隔离咖啡罐橙色盖子时提供更准确的结果。

以上是如何使用 cv2.inRange 准确确定 OpenCV 中颜色检测的 HSV 边界?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn