我已经使用opencv和python两周了。我想找到一个移动物体的中心。
我首先发现两帧和按位的区别。按位后,它就像一组围绕移动物体(四旋翼)的白点一样,如下图所示。
所以我的问题是:在这种情况下,我应该使用什么方法来找到移动物体(四旋翼)的中心?
我想也许只是找到所有这些点的平均中心,但我不知道该怎么做。
以下是示例图片
这是我的代码
import cv2
def diffImg(t0, t1, t2):
d1 = cv2.absdiff(t2, t1)
d2 = cv2.absdiff(t1, t0)
return cv2.bitwise_and(d1, d2)
cam = cv2.VideoCapture('track_outdoor.avi')
winName = "Movement Indicator"
cv2.namedWindow(winName, cv2.CV_WINDOW_AUTOSIZE)
# Read three images first:
t_minus = cv2.cvtColor(cam.read()[1], cv2.COLOR_RGB2GRAY)
t = cv2.cvtColor(cam.read()[1], cv2.COLOR_RGB2GRAY)
t_plus = cv2.cvtColor(cam.read()[1], cv2.COLOR_RGB2GRAY)
while True:
diff_frame= diffImg(t_minus, t, t_plus)
cv2.imshow( 'Original', t_plus )
cv2.imshow( winName, diff_frame )
# Read next image
t_minus = t
t = t_plus
t_plus = cv2.cvtColor(cam.read()[1], cv2.COLOR_RGB2GRAY)
key = cv2.waitKey(10)
if key == 27:
cv2.destroyWindow(winName)
break
更新#1
首先感谢托斯瓦夫回答
我只是尝试应用方法来寻找群众中心 它起作用,但是尽管如此我并不准确。
所以如果我改变diff_frame的亮度,我想出了另一个想法 使用轮廓或其他方法等方法更容易,更准确吗?
答案 0 :(得分:0)
您可以应用几种方法,
以下我们需要定义包含这些点的常规轮廓:
如果你能找到不规则的形状,你可以用时间来计算质心:
把你的点放在变量中,例如vector<Points> contour
;然后执行以下操作:
片刻妈妈=时刻(垫子(轮廓));
//找到群众中心
点mc = 点(mom.m10 / mom.m00,mom.m01 / mom.m00);