使用OpenCV进行物体跟踪
问题描述:
我有一条鱼在水槽中游动,还有浮在表面上的小颗粒。所以,移动的物体是游泳的鱼和数百个微粒。这里是video sample的链接。使用OpenCV进行物体跟踪
我的兴趣是在每个单一框架中正确定位鱼。
目前,我的程序如下:在每个单帧
- 移除光反射(移动噪声)由RGB转换到HSV颜色空间。
- 适用背景减法
cv2.BackgroundSubtractorMOG
。 - 使用侵蚀和膨胀来去除大部分移动的粒子噪声。
- 查找二进制图像中斑点的所有轮廓,并计算所有斑点的旋转边界框。
- 计算所有旋转边界框的纵横比。
- 通过使用简单的标准识别前景帧中的鱼:如果斑点占据多于1个像素,则检查其旋转边界框的宽高比。如果它有最大的长宽比,它被认为是鱼。
我的问题是:
- 在第10帧,移动的鱼不被
cv2.BackgroundSubtractorMOG
确定,我的功能进行调整history
,nmixture
,它似乎并不在很好地工作前10帧。 如何在前几帧拾取移动物体? - 在某些帧中,
cv2.BackgroundSubtractorMOG
可以拿起鱼的轮廓模糊,如在下面的PIC红圈:有没有什么方法来填补那个斑点轮廓,并确定它是一条鱼?
以下是my code的链接。
谢谢!
使用直接帧差异的阈值:cv :: absdiff(frame1,frame2)> T在前几帧或更好(absdiff(frame1,frame2)> T)&&(absdiff(ftame2,frame3)> T) – Micka