opencv4android做对象跟踪

时间:2015-07-15 16:10:19

标签: android opencv

我使用ffmpeg在Android项目的SurfaceView上播放视频流。现在我想实现以下功能。 1)通过在SurfaceView上绘制一个红色矩形来选择一个对象。 2)将所选对象的x,y,宽度,高度和原始视频帧发送到opencv。 3)然后,opencv通过处理新的视频帧返回对象的新x和y。

之前有人这么做过吗?我会很高兴给你一些建议,或者告诉我,我可以下载演示源代码。非常感谢你。

1 个答案:

答案 0 :(得分:1)

对于第(1)部分,尝试再搜索一下Google。很难找到使用触摸输入的教程,绘制矩形的教程以及绘制SurfaceView的教程。第(2)部分仅仅是通过如何设置和定义变量来完成的 - 没有一个特定的机制或功能可以发送"数据结束。

第(3)部分是不明显的部分,因此我将关注的部分。与计算机视觉中的大多数问题一样,您可以通过多种方式解决对象跟踪问题。没有特别的顺序,我想到的是:

  • 光流 - Python openCV示例为here
    • Lucas-Kanade - 算法逐帧比较提取的特征。 [默认情况下,这些功能是Shi-Tomasi,但也可以是Brief,ORB,SIFT / SURF或任何其他功能。]如果功能的数量合理[在一个数量级100之内],这个运行得足够快。
    • 密集[Farneback] - 算法比较连续帧并产生运动方向和幅度的密集矢量场。
  • 直接图像注册 - 如果帧之间的运动很小[约为相机视野的5-15%],则有一些功能可以将之前的图像映射到当前图像快速有效。但是,此功能不在vanilla OpenCV包中 - 您需要下载并编译contrib模块,并使用Android NDK。如果您是Java和C ++的初学者,我建议您不要使用它。
  • 模板匹配 [example] - 如果对象和相机方向没有太大变化,则非常有用且便宜。