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