我正在使用OpenCV 2.4.5来实时跟踪一条鱼。这条鱼在穿梭机里,也在移动。我只能从灰度相机得到图像。
我试着用这两张图片只拍到鱼。在应用阈值之前,我想要去除背景,我试图减去两张图像,但它不适用于航天飞机外部的部分。
下面是两个帧,以及我的两个结果: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);当鱼留在穿梭机里时,它就会起作用,但当它不在的时候就不起作用了。问题是,梭子外部的尾巴部分应该与中的部分具有相同的强度。
如果有人能帮我一下,我会很感激的。
提前谢谢。
发布于 2013-11-08 21:17:39
每一步动作都有一个流畅的模式。视频处理的最好方法是找出视频中的移动和偏移。
你的问题是航天飞机在移动,鱼在里面游动。
1)计算大小为8或16的小块的运动矢量(如果图像是低分辨率,则为4)。
2)使用许多小块的运动矢量和它们之间的相关性,你可以识别几个接近的块在特定方向上的移动它是你的对象/鱼(你将知道鱼的大致大小和大小变化:P)
3)场景/背景/穿梭机构成了大屏幕的其余部分。因此,如果你在相同的方向和大小上找到许多带有MV的块,那么它就是背景。你也可以怀疑有弯道的穿梭机。
跟踪鱼的最后位置,通过在接近最后位置的区域内搜索而不是在整个图像中搜索来避免巨大的处理。(正如我所说的,移动是平滑的,因此下一步将非常接近上一步,因此不需要搜索整个图像)。
发布于 2013-07-23 15:08:56
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/
https://stackoverflow.com/questions/17794471
复制相似问题