2012-03-16 103 views
1

我想知道是否有可能在opencv有一个阈值每像素。例如p(x,y)应该高于100,然后p(x + 1,y)应该高于101.每像素阈值

您可以将此视为背景扣除。这样背景前的所有东西都会保留下来。

我在想这样的事情。我有一张图片,然后是其他图片。我减去它们。这意味着剩下的一切应该高于阈值。

例如:

enter image description here

在右侧是当相机(Kinect的)启动拍摄的图像。然后,左侧的图像是当前的摄像机馈送 - 左侧的图像。

的代码:

cvSub(深度,depthInit,差,NULL);

由于没有什么变化,这应该是更黑的(我能理解有一些噪声)

难道这是因为有留下什么负值?提前

+2

您可以创建一个矩阵T与与包含所有阈值的图像大小相同,然后执行“Mat res = p> t;'。这能解决你的问题吗? – sietschie 2012-03-16 12:22:49

+0

这是怎么可能在opencv与IplImages? – Ojtwist 2012-03-16 13:17:04

+0

哦,对不起。我在谈论C++ API和cv :: Mat类型。我不知道使用C API是否可以这样做。 – sietschie 2012-03-16 13:45:01

回答

0

我想你想cvCmpDocs

// make sure threshold is zero to start with 
cvZero(thresholded); 
// for pixels where current > background, sets thresholded = high value 
cvCmp(current, background, thresholded, CV_CMP_GT); 
+0

我想这个技巧是可行的,尽管我不能完全确认,因为我的结果包含了很多Kinect造成的噪音。 – Ojtwist 2012-03-19 18:03:10

+0

只需要在那里粘贴:) cvSub *应该*将负值截断为0(它在C中)。您可以通过执行cvAbsDiff,cvCmp,然后cvAnd结果来获得相同的效果。 – dantswain 2012-03-19 18:26:09

0

THX看看this问题。它可以帮助你?

您也可以尝试扫每像素像素,使用的,并增加了门槛......