使用OpenCV进行对象跟踪

时间:2017-08-14 22:58:56

标签: python opencv

我有一个视频剪辑,鱼儿在水槽中游动,浮在水面上的小颗粒。因此,移动的物体是游泳鱼和数百个粒子。这是video sample的链接。

我的兴趣是在每一帧中正确定位鱼。

目前,我的程序如下:

  1. 通过将RGB转换为HSV色彩空间来消除每个帧中的光反射(移动噪声)。
  2. 应用背景减法方法cv2.BackgroundSubtractorMOG
  3. 使用侵蚀和扩张来消除大部分移动的粒子噪音。
  4. 查找二进制图像中斑点的所有轮廓,并计算所有斑点的旋转边界框。
  5. 计算所有旋转边界框的宽高比。
  6. 使用简单的标准识别前景帧中的鱼:如果blob占用的像素超过1个,则检查其旋转的边界框的纵横比。如果它具有最大的纵横比,则将其视为鱼。
  7. 我的问题是:

    1. 在前10帧中,cv2.BackgroundSubtractorMOG未识别移动的鱼,我在功能中调整了historynmixture,它似乎在第一帧中效果不佳10帧。 如何在前几帧中拾取移动物体?
    2. 在某些框架中,cv2.BackgroundSubtractorMOG可以拾取模糊的鱼轮廓,如下图中的红色圆圈所示:red circle 是否有任何方法可以填满该斑点概述并将其标识为鱼?
    3. 以下是my code

      的链接

      谢谢!

1 个答案:

答案 0 :(得分:0)

假设鱼只沿着这个方向(或相反方向)游动,你可以尝试使用自定义形态学操作来帮助长出细长的物体。它至少应该增加blob的大小,从而为MoG模型提供更多数据用于跟踪。