我想计算移动的物体。
我可以找到对象的质心:
for i in range(len(contours)):
if len(contours[i]) >= 5:
ellipse = cv2.fitEllipse(contours[i])
(center , axis, angle) = ellipse
cx,cy = int(center[0]),int(center[1]) #centroid
ax1,ax2 = int(axis[0])-2,int(axis[1])-2
orientation = int(angle)
我画了一句话:
Line = 100
cv2.line(frame, (Line, 0), (Line, 500), (255, 0, 0), 1)
检查质心是否越过该线:
distance = int(cx - Line)
if (distance == 0 or distance == 1):
counter += 1
问题是;
如果我同时检查distance
和0
的{{1}},有时候对象会被计算两次。
另一方面如果我只检查1
或仅检查0
,有时我会错过该对象。
如何提高计数的准确性?
修改
仅在1
方向上移动的对象。绿点代表物体的中心。
最初,-X
在Line
轴和对象上的X
来自0th
像素,并且在-X
轴上。
我从对象的中心像素X
坐标中减去Line
X
坐标。如果它们交叉,则它们必须处于相同的X
轴。如果它们处于相同的X
坐标,则它们的减法必须等于0
。
有时Line
和Object's
X
坐标不会交叉,似乎对象跳过Line
。
如果它不是计算多个移动物体的好方法,它会是什么?