0
我有一个包含CV_32FC1值的cv :: Mat。 我用INRANGE函数来获得具有特定值的波纹管元素的位置:使用cv :: inrange on CV_32FC1 mat
cv::inRange(map,cv::Scalar(0),cv::Scalar(0.5),mask);
但在遮片阵列的所有元素是零,但我肯定面膜必须有一些255的值。我能解决这个问题吗?
我有一个包含CV_32FC1值的cv :: Mat。 我用INRANGE函数来获得具有特定值的波纹管元素的位置:使用cv :: inrange on CV_32FC1 mat
cv::inRange(map,cv::Scalar(0),cv::Scalar(0.5),mask);
但在遮片阵列的所有元素是零,但我肯定面膜必须有一些255的值。我能解决这个问题吗?
我已成功在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。
如果您有0和1作为下限和上限会发生什么?在传递它之前,你有没有在'map'上使用'imshow()'以确保它看起来像你期望的? –
真的有0到0.5范围内的任何值吗?例如,尝试范围-255到+255。 – Micka
或尝试testMat = map <= 0.5作为第一次检查。 – Micka