使用Emgu CV(或OpenCV)进行运动跟踪

6

如何使用Emgu CV或OpenCV进行运动跟踪?有哪些不同的方法可以做到这一点?

我想要对固定背景下的物体进行跟踪。

最好的问候


你想要追踪什么?固定背景下的物体?特定颜色的物体?还是特定的物体?请具体说明。 - damian
请实现光流跟踪器。详见https://dev59.com/YFDTa4cB1Zd3GeqPLr_U - Sven Hecht
1个回答

7

由于我不了解Emgu CV,我建议使用OpenCV。 我建议您使用Lucas-Kanade跟踪(光流)。 通过执行以下操作来跟踪对象:

  1. 从源(网络摄像头/视频文件等)读取图像
  2. 对其进行预处理(可选,但可能证明有用)
  3. 从区域中提取(例如从人的头部)要跟踪的点。您可以使用cvGoodFeaturesToTrack方法自动完成此操作。
  4. 然后,您可以使用cvCalcOpticalFlowPyrLK跟踪这些点,这将给您跟踪点的新位置。

此处查看更好的教程。

如果您想了解这些函数背后的概念,我强烈建议阅读学习OpenCV-不幸的是,链接的书只是一个预览,有一些缺页。无论如何,我相信您可以想到一个可以获得这本书的地方;)。

谢谢您的回答。我已经按照您说的使用Emgu完成了。现在我该如何将点(像素)分组为一个对象(有多个对象)?我该如何确定方向?(好的,这可能是一个新问题 :)) - Kaveh Shahbazian
你可以获取区域的边界矩形,例如:http://i54.tinypic.com/15d5ncj.png - Matyas
请问您能指导我如何获取边界矩形吗? - Kaveh Shahbazian
你需要获取所有点的x和y坐标的最小值和最大值,这将是边界框的左上角(最小值)和右下角(最大值)。通过比较两个(或多个)连续帧中的坐标,可以确定方向。 - Matyas
谢谢!我已经做到了,但我的问题是如何将点分组为不同的对象?我使用了向量(来自2个帧的2组点),但如果2个对象具有相同的速度和方向,则它们将分组为一个。是否有其他类型的度量来将点分组为对象?谢谢 - Kaveh Shahbazian
如果您知道群组数量,那么您可以使用k均值聚类对点进行分组。目前我没有其他想法。希望这能有所帮助(在我的例子中,我之前选择了要跟踪的区域,因此我事先知道了群组)。 - Matyas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接