【问题标题】:How to set HSV color range in OpenCV?如何在 OpenCV 中设置 HSV 颜色范围?
【发布时间】:2017-03-16 03:55:01
【问题描述】:

我有一部手机,它是 HSV 直方图,我想跟踪这部手机的运动。根据它的直方图,我设置图像范围如下:

greenLower = (300, 0, 50)
greenUpper = (50, 128,250 )
cv2.inRange(hsv, greenLower, greenUpper)

但是挥动手机时什么都没有检测到,我很确定是因为颜色范围不对,你能告诉我如何正确设置颜色范围吗?特别是当HUE值在[300~50]之间时,我应该将它设置为(50~300)还是(300~50),因为HUE是一个圆圈。

Phone

HSV histogram:

【问题讨论】:

  • 您是如何获得 HSV 的?似乎有点奇怪,只有饱和度是 0.0 到 1.0 之间的浮点数。 |关于inRange 的问题通过阅读documentation 得到解答。

标签: opencv hsv hsb


【解决方案1】:

上下限设置错误,一定是:

greenLower = (50, 0, 50)         # Previously (300, 0, 50)
greenUpper = (300, 128, 250)     # Previously (50, 128,250)

还要确保 hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) as OpenCV 遵循 BGR 约定。

编辑:

要分割多个范围0~50300~359 中的颜色,您可以对两个范围执行两次cv2.inRange()

greenLower1 = (0, 0, 20)         
greenUpper1 = (50, 128, 100)     

greenLower2 = (300, 0, 20)         
greenUpper2 = (359, 128, 100)     

mask1 = cv2.inRange(img_hsv, greenLower1, greenUpper1)
mask2 = cv2.inRange(img_hsv, greenLower2, greenUpper2)

mask = cv2.max(mask1, mask2)

【讨论】:

  • 仍然没有检测到任何东西,您建议匹配单个范围 50~300 或两个范围 0~50 和 300~359 的色调值
  • 它将在50~300 范围内工作,并且在我的机器上使用您的输入图像工作正常,您是否将输入图像正确转换为 HSV?
  • @ZdarR,谢谢,我已经按照你的建议将图像转换为HSV,根据直方图,真正的范围应该是0~50和300~359,我只是不知道如何将这两个组合为一个
  • 更新了@AlexLuya,但我猜你的计算中有一些错误,因为输出仍然相同,因为300~359 没有显示任何效果。此外,您的强度范围为 0-255,但在 HSV 的情况下,强度范围为 0-100
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-03
  • 1970-01-01
  • 2014-06-19
  • 2019-05-12
  • 1970-01-01
相关资源
最近更新 更多