2017-03-16 161 views
0

我有一个手机,它是HSV直方图像打击,我想跟踪它的直方图这款手机的movement.Based,我设定的图像范围是这样的:如何在OpenCV中设置HSV颜色范围?

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

但没有得到检测出挥动手机时,我很确定这是因为颜色范围是错误的,你会告诉我如何让颜色响起设置正确吗?特别是当HUE值在[300〜50]之间时,我应该将它设置为(50〜300)还是(300〜50)由于HUE是一个cirle。

Phone 

Phone

HSV histogram: 

HSV Histogram

+0

你是如何获得HSV?似乎有点奇怪,只有饱和度是0.0到1.0之间的浮点数。 |通过阅读[documentation](http://docs.opencv.org/2.4/modules/core/doc/operations_on_arrays.html#inrange)可以回答关于'inRange'的问题。 –

回答

0

你错误设定了上限和下限,它们必须是:

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

还要确保hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)为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) 
+0

仍然没有检测到任何东西,你会建议在一个单一的范围50〜300或两个范围0〜50和300〜359匹配色调值 –

+1

它会在范围'50〜300'工作,并且在我的机器上工作正常与您的输入图像,您是否已正确地将输入图像转换为HSV? – ZdaR

+0

@ ZdarR,谢谢,我已经按照你的建议将图像转换为HSV,根据直方图,真正的范围应该是0〜50和300〜359,我只是不知道如何将这两个图像合并为一个。 –