Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在OpenCV中设置HSV颜色范围?_Opencv_Hsv_Hsb - Fatal编程技术网

如何在OpenCV中设置HSV颜色范围?

如何在OpenCV中设置HSV颜色范围?,opencv,hsv,hsb,Opencv,Hsv,Hsb,我有一部手机,它的HSV直方图像blow,我想跟踪这部手机的运动。根据它的直方图,我设置图像范围如下: greenLower = (300, 0, 50) greenUpper = (50, 128,250 ) cv2.inRange(hsv, greenLower, greenUpper) 但是在挥动手机时没有检测到任何东西,我很确定这是因为颜色范围错误,你能告诉我如何正确设置颜色范围吗?特别是,当色调值在[300~50]之间时,我应该将其设置为(50~300)还是(300~50),因为色调

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

greenLower = (300, 0, 50)
greenUpper = (50, 128,250 )
cv2.inRange(hsv, greenLower, greenUpper)
但是在挥动手机时没有检测到任何东西,我很确定这是因为颜色范围错误,你能告诉我如何正确设置颜色范围吗?特别是,当色调值在[300~50]之间时,我应该将其设置为(50~300)还是(300~50),因为色调是一个圆环

Phone


您错误地设置了上限和下限,它们必须是:

greenLower = (50, 0, 50)         # Previously (300, 0, 50)
greenUpper = (300, 128, 250)     # Previously (50, 128,250)
此外,还要确保OpenCV遵循
BGR
惯例,因此
hsv=cv2.cvt颜色(img,cv2.COLOR\u BGR2HSV)

编辑:

要在多个范围内分割颜色
0~50
300~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)

您错误地设置了上限和下限,它们必须是:

greenLower = (50, 0, 50)         # Previously (300, 0, 50)
greenUpper = (300, 128, 250)     # Previously (50, 128,250)
此外,还要确保OpenCV遵循
BGR
惯例,因此
hsv=cv2.cvt颜色(img,cv2.COLOR\u BGR2HSV)

编辑:

要在多个范围内分割颜色
0~50
300~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)

您是如何获得HSV的?似乎有点奇怪,只有饱和度是介于0.0和1.0之间的浮点值关于
inRange
的问题可以通过阅读得到答案。您是如何获得HSV的?似乎有点奇怪,只有饱和度是介于0.0和1.0之间的浮点值关于
inRange
的问题通过阅读得到了回答。但是,没有检测到任何东西,您是否建议在单个范围50~300或两个范围0~50和300~359内匹配色调值它将在范围
50~300
内工作,并且在我的机器上使用您的输入图像时工作正常,您将输入图像正确地转换为HSV了吗?@ZdarR,谢谢,我已经按照您的建议将图像转换为HSV了,根据直方图,实际范围应该是0~50和300~359,我只是不知道如何将这两个组合为一个更新的@AlexLuya,但我猜您的计算中有一些错误,由于
300~359
未显示任何效果,因此输出仍然相同。同样,您的亮度范围为
0-255
,但如果HSV的亮度范围为
0-100
,仍然没有检测到任何东西,您是否建议在单个范围50~300或两个范围0~50和300~359内匹配色调值,它将在范围
50~300
内工作,并且在我的机器上使用您的输入图像工作正常,您将输入图像正确地转换为HSV了吗?@ZdarR,谢谢,我已经按照您的建议将图像转换为HSV了,根据直方图,实际范围应该是0~50和300~359,我只是不知道如何将这两个组合为一个更新的@AlexLuya,但我猜您的计算中有一些错误,由于
300~359
未显示任何效果,因此输出仍然相同。此外,您的强度范围为
0-255
,但对于HSV,强度范围为
0-100