2017-08-14 84 views
1

我有一条鱼在水槽中游动,还有浮在表面上的小颗粒。所以,移动的物体是游泳的鱼和数百个微粒。这里是video sample的链接。使用OpenCV进行物体跟踪

我的兴趣是在每个单一框架中正确定位鱼。

目前,我的程序如下:在每个单帧

  1. 移除光反射(移动噪声)由RGB转换到HSV颜色空间。
  2. 适用背景减法cv2.BackgroundSubtractorMOG
  3. 使用侵蚀和膨胀来去除大部分移动的粒子噪声。
  4. 查找二进制图像中斑点的所有轮廓,并计算所有斑点的旋转边界框。
  5. 计算所有旋转边界框的纵横比。
  6. 通过使用简单的标准识别前景帧中的鱼:如果斑点占据多于1个像素,则检查其旋转边界框的宽高比。如果它有最大的长宽比,它被认为是鱼。

我的问题是:

  1. 在第10帧,移动的鱼不被cv2.BackgroundSubtractorMOG确定,我的功能进行调整historynmixture,它似乎并不在很好地工作前10帧。 如何在前几帧拾取移动物体?
  2. 在某些帧中,cv2.BackgroundSubtractorMOG可以拿起鱼的轮廓模糊,如在下面的PIC红圈:red circle有没有什么方法来填补那个斑点轮廓,并确定它是一条鱼?

以下是my code的链接。

谢谢!

+0

使用直接帧差异的阈值:cv :: absdiff(frame1,frame2)> T在前几帧或更好(absdiff(frame1,frame2)> T)&&(absdiff(ftame2,frame3)> T) – Micka

回答

0

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

+0

非常感谢你!是的,大多数时候,鱼会沿着反对粒子运动的方向游动。你的建议是在应用MOG之前拉长所有物体?你对形态学核心有任何建议来延长物体吗? – Jundong

+0

即使膨胀,然后侵蚀应连接这些斑点的部分。不过,您将不得不尝试内核。我最近没有尝试过,所以很难提供直接的建议。 – Totoro