如何找到正在移动的二进制图像中的点中心

时间:2014-03-03 14:07:35

标签: python opencv image-processing

我已经使用opencv和python两周了。我想找到一个移动物体的中心。

我首先发现两帧和按位的区别。按位后,它就像一组围绕移动物体(四旋翼)的白点一样,如下图所示。

所以我的问题是:在这种情况下,我应该使用什么方法来找到移动物体(四旋翼)的中心?

我想也许只是找到所有这些点的平均中心,但我不知道该怎么做。

以下是示例图片

ss

ss2



这是我的代码

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的亮度,我想出了另一个想法 使用轮廓或其他方法等方法更容易,更准确吗?

1 个答案:

答案 0 :(得分:0)

您可以应用几种方法,

  • 获得所有点的x协调平均值,y的值相同,但这种方式可能不如您所需。
  • 以下我们需要定义包含这些点的常规轮廓:

    • triangle =>找到三角形中心
    • circle =>圆心或甚至矩形。
    • 通过这种方式,我邀请您查看opencv functions
  • 如果你能找到不规则的形状,你可以用时间来计算质心: 把你的点放在变量中,例如vector<Points> contour;然后执行以下操作:

  

片刻妈妈=时刻(垫子(轮廓));
   //找到群众中心
   点mc =   点(mom.m10 / mom.m00,mom.m01 / mom.m00);