首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用OpenCV将两张图片相减以去除背景

用OpenCV将两张图片相减以去除背景
EN

Stack Overflow用户
提问于 2013-07-23 02:11:49
回答 2查看 9.2K关注 0票数 1

我正在使用OpenCV 2.4.5来实时跟踪一条鱼。这条鱼在穿梭机里,也在移动。我只能从灰度相机得到图像。

我试着用这两张图片只拍到鱼。在应用阈值之前,我想要去除背景,我试图减去两张图像,但它不适用于航天飞机外部的部分。

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

我的代码就是这么简单:

代码语言:javascript
复制
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);

当鱼留在穿梭机里时,它就会起作用,但当它不在的时候就不起作用了。问题是,梭子外部的尾巴部分应该与中的部分具有相同的强度。

如果有人能帮我一下,我会很感激的。

提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-08 21:17:39

每一步动作都有一个流畅的模式。视频处理的最好方法是找出视频中的移动和偏移。

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

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

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

3)场景/背景/穿梭机构成了大屏幕的其余部分。因此,如果你在相同的方向和大小上找到许多带有MV的块,那么它就是背景。你也可以怀疑有弯道的穿梭机。

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

票数 0
EN

Stack Overflow用户

发布于 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/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17794471

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档