2017-06-18 82 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。