使用OpenCV和Python检测HSV图像中的颜色出现问题

3

我正在尝试使用OpenCV和Python进行简单的彩色物体检测。

我已经阅读了几篇教程,但遇到了一个令我无法继续前进的混乱问题。虽然我提供正确的HSV数据,但我的程序似乎无法检测到那种颜色的物体。

我使用这张图片(抱歉我的网络摄像头质量很差):

Sample

为了检测红色物体,我恢复了HSV颜色数据:

Color data

这是我的代码:

YELLOW = 30
BLUE = 210
GREEN = 145
RED = 320

color = RED

img = cv2.imread("sample.png")

hue = color // 2

lower_range = np.array([max(0, hue - 10), 0, 0], dtype=np.uint8)
upper_range = np.array([min(180, hue + 10), 255, 255], dtype=np.uint8)

img_hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

mask = cv2.inRange(img, lower_range, upper_range)

binary_img = cv2.bitwise_and(img_hsv, img_hsv, mask=mask)
binary_img = cv2.cvtColor(binary_img, cv2.COLOR_BGR2GRAY)
_, binary_img = cv2.threshold(binary_img, 127, 255, cv2.THRESH_BINARY)

cv2.imshow('sample', binary_img)
cv2.waitKey(0)

结果:

Result

其他颜色的结果是正确的(可能因为质量较差而不完美),但我无法得到红色的结果。然而,HSV转换后的图像非常明显。

HSV Image

请问你看到我在做什么错误了吗?

1个回答

3

您做的一切都是正确的,唯一的问题是您将阈值应用于BGR图像而不是HSV图像。

更改:

mask = cv2.inRange(img, lower_range, upper_range)

To

mask = cv2.inRange(img_hsv, lower_range, upper_range)

我测试了一下,看起来很好。我猜你需要进行一些形态学操作才能得到最终的结果。


1
我正在使用HSV图像,但是得到了奇怪的结果。如果您有时间,可以在这里查看它:http://stackoverflow.com/questions/34170856/trying-to-detect-blue-color-from-image-using-opencv-and-getting-unexpected-resu? - Solace

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接