1

我有一部手机,它的 HSV 直方图就像打击一样,我想跟踪这部手机的运动。基于它的直方图,我将图像范围设置如下:

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

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

Phone

电话

HSV histogram:

HSV 直方图

4

1 回答 1

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~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)
于 2017-03-16T04:17:55.550 回答