opencv如何在光流后跟踪物体?

MB.*_*MB. 1 opencv

在视频上进行光流(lk)之后,根据这些数据找到对象并跟踪它们的最佳方法是什么?

这可能听起来非常苛刻,但我希望能够在物体周围定义清晰的轮廓,所以如果它是一个奇怪形状的瓶子或能够检测到边缘的东西.

san*_*iso 11

我不确定LK是最好的算法,因为它计算一组稀疏角点的运动,并且跟踪通常在密集的光流结果(例如Farneback或Horn Schunck)中表现更好.计算流程后,作为第一步,您可以对其规范进行一些阈值处理(以保留运动部件),并尝试从此结果中提取连接区域.但要注意,如果您没有要跟踪的对象模型,那么您的任务并不容易.

另一方面,如果您主要对跟踪感兴趣并且可以接受一些交互性,则可以查看camshift示例代码,以了解如何根据图像区域的外观选择和跟踪图像区域.

---编辑---

如果您的相机是静态的,请改用背景减法.使用OpenCV 2.4 beta,您必须在视频模块文档中查找类BackgroundSubtractor及其子类.

还要注意,光流可以是实时的(或不是很远),具有良好的参数选择,也可以是GPU实现.在Windows上,您可以使用TU Graz/Gpu4Vision组的flowlib.OpenCV也有一些GPU密集的光流,例如类gpu :: BroxOpticalFlow.

---编辑2 ---

将单像素检测连接到大对象是一项称为连接组件标记的任务.在OpenCV中实现了一种快速算法.所以这给你一个管道,它是:

  • 运动检测(像素级)--->连接comp.标记--->对象跟踪(添加运动信息,卡尔曼滤波的可能轨迹......).

但我们必须停在这里,因为我们很快就会超出你最初问题的范围;-)