2011-07-06 31 views
3

我在C#中使用webcamera(使用AForge)。我也有一些默认背景。我需要提取当前图像和背景之间的差异,并创建一个仅包含默认背景中不存在的对象的新图像。例如,如果我将我的手移到webcamera的前面,我只需要输出该手(其余的背景为白色)。如果我只逐一比较像素,它会变得很难看,因为有很多噪音。我曾尝试使用阈值来区别,但结果仍然非常糟糕。我认为也许有一些过滤器或一个已知的算法如何做到这一点?任何帮助将非常感激。在C#中提取2个图像之间的差异

+0

只是一个想法,你不能使用Kinect SDK吗? http://research.microsoft.com/en-us/um/redmond/projects/kinectsdk/或者,这可能至少会给你一个线索如何解决你的问题。 –

+0

Kinect设备不是这个SDK吗?至少它在SDK描述中这样说。我只使用单个摄像头。其实我已经找到了AForge过滤器,称为CustomFrameDifferenceDetector类,但没有关于如何使用它足够的文档。至少我还找不到它。 –

+0

不确定。当你想跟踪手部动作时想想它。:) –

回答

0

您可以随时尝试比较两者的灰度图像。假设你的网络摄像头是静止的(因为如果不是,那么你将不得不做更多的调整像素位移),那么你可以将图像转换为灰度,并有一个你认为图像不同的阈值:

int threshold = 30; 
PixAvg1[i,j] = (Pix1.R + Pix1.G + Pix1.B)/3 
PixAvg2[i,j] = (Pix2.R + Pix2.G + Pix2.B)/3 
if (Math.Abs(PixAvg1[i,j] - PixAvg2[i,j+1])>threshold) 
    difPixel == true; 

阈值是您想要获得的像素之间有多大的容差。该值可能来自图像亮度的差异。

有了这个,你不会得到松脆的结果,因为你介绍一些像素将匹配,但是,你可以运行一个额外的扫描(如果你想),并做一些种类的区域填充。