使用Emgu cv的背景减法

时间:2013-06-30 16:20:55

标签: c# background emgucv background-subtraction

我需要知道有一种方法可以删除实时流媒体网络摄像头的背景。有一种名为背景减法器的方法。如果有人知道使用它,请帮助我解决问题..

1 个答案:

答案 0 :(得分:0)

如果您已有背景图像,则可以计算

I - B

我是图像,B是背景(类型为图像)

B - 我

也会奏效。

由于图像不存储负数,您可能希望使用

将它们组合在一起

(I - B)+(B - I)

并将结果转换为灰度。

我发现更好的方法是使用傅里叶变换来做到这一点。

即:

F ^ -1(F(I) - F(B))

例如

    CvInvoke.cvDFT(video.Convert<Gray, Single>().Ptr, DFT.Ptr, Emgu.CV.CvEnum.CV_DXT.CV_DXT_FORWARD, -1);
    CvInvoke.cvDFT(Background.Convert<Gray, Single>().Ptr, DFTBack.Ptr, Emgu.CV.CvEnum.CV_DXT.CV_DXT_FORWARD, -1);

    CvInvoke.cvDFT((DFTBack - DFT).Convert<Gray, Single>().Ptr, originalLeft.Ptr, Emgu.CV.CvEnum.CV_DXT.CV_DXT_INVERSE, -1);
    CvInvoke.cvDFT((DFT - DFTBack).Ptr, originalRight.Ptr, Emgu.CV.CvEnum.CV_DXT.CV_DXT_INVERSE, -1);

当前景部分半透明时,这很有效。

还有内置的Foreground detector