2017-06-18 75 views
0

我有一個包含CV_32FC1值的cv :: Mat。 我用INRANGE函數來獲得具有特定值的波紋管元素的位置:使用cv :: inrange on CV_32FC1 mat

cv::inRange(map,cv::Scalar(0),cv::Scalar(0.5),mask); 

但在遮片陣列的所有元素是零,但我肯定面膜必須有一些255的值。我能解決這個問題嗎?

+0

如果您有0和1作爲下限和上限會發生什麼?在傳遞它之前,你有沒有在'map'上使用'imshow()'以確保它看起來像你期望的? –

+0

真的有0到0.5範圍內的任何值嗎?例如,嘗試範圍-255到+255。 – Micka

+2

或嘗試testMat = map <= 0.5作爲第一次檢查。 – Micka

回答

0

我已成功在CV_32FC1矩陣中使用inRange。

代碼:cv::inRange(map,cv::Scalar(0),cv::Scalar(0.5),mask);將輸出一個名爲mask的CV_8UC1矩陣,其大小與map相同。

mask將在每個位置包含一個255,該位置的值的值介於0和.5之間(包含),其他位置的值爲0。

如果mask完全填充爲0,則map的值不得爲0到.5之間的任何值。

嘗試增大範圍並查看在mask中是否得到非零值。


我從意見中看到,您希望找到所有非零值的位置作爲第二步。

一旦你已經增加了範圍從inRange功能得到有意義的結果,只需使用findNonZero(mask, locations);locations矩陣的1,類型CV_32SC2,位置矩陣設置爲N。