1

我正在使用 OpenCV 2.4.5 实时跟踪鱼。鱼在穿梭,也在移动。我只从灰度相机中得到帧。

我尝试只使用这两个图像来获取鱼。在应用阈值之前,我想删除我试图减去两个图像的背景,但它不适用于航天飞机外部的部分。

这是 2 帧,以及我的两个结果:https ://app.box.com/s/3iug7wan8vz75j3usv7w

我的代码就这么简单:

Mat fg = imread("fg.tif",1);
Mat bg = imread("bg.tif",1);

Mat result1 = abs(fg-bg);
imwrite("withoutMask.tif",result1);

Mat result2;
bitwise_and(fg, result1, result2);
imwrite("withMask.tif",result2);

它在鱼停留在梭子里时有效,但在他外出时无效。问题是,在飞梭外面的尾巴部分应该和里面的部分有相同的强度。

如果有人可以帮助我,我将不胜感激。

提前致谢。

4

2 回答 2

0

opencv 中有一个视频模块,它提供了一些很好的背景减法算法,看看:http: //docs.opencv.org/modules/video/doc/motion_analysis_and_object_tracking.html#backgroundsubtractor

此外,这里有一个有用的讨论:http: //answers.opencv.org/question/7998/object-detection-using-background-subtraction/

于 2013-07-23T07:08:55.697 回答
0

每一个动作总是有一个平滑的模式。视频处理的最佳方法是找到视频中的移动和变化。

你的问题是航天飞机在移动,鱼在里面游泳。

1) 计算大小为 8 或 16 的小块的运动矢量(如果图像是低分辨率的,则为 4)。

2)使用许多小块的运动矢量和它们之间的相关性,您可以识别几个靠近块在特定方向上的运动,这是您的对象/鱼(您将知道鱼的近似大小和大小变化:P)

3)场景/背景/穿梭正在大屏幕的其余部分。因此,如果您发现许多具有相同方向和大小的 MV 块,那么它就是背景。您也可以怀疑有拐角的穿梭机。

通过在靠近最后位置的区域中搜索而不是在整个图像中搜索来跟踪鱼的最后位置以避免大量处理。(正如我所说的动作是平滑的,因此下一步将非常接近前一个,因此无需搜索整个图像)。

于 2013-11-08T13:17:38.637 回答