2012-03-16 105 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問題。它可以幫助你?

您也可以嘗試掃每像素像素,使用的,並增加了門檻......