C++ 在cv_32FC1垫上使用cv::inrange
我有一个包含cv_32FC1值的cv::Mat。 我使用inRange函数获得具有特定值的元素的位置,如下所示:C++ 在cv_32FC1垫上使用cv::inrange,c++,opencv,C++,Opencv,我有一个包含cv_32FC1值的cv::Mat。 我使用inRange函数获得具有特定值的元素的位置,如下所示: 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_8
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
将在映射值介于0和.5(包括0和.5)之间的每个位置包含255,在其他位置包含0
如果mask
完全用0填充,则map
的值不得介于0和.5之间
尝试增大范围,查看是否在掩码中获得非零值
我从评论中看到,作为第二步,您希望找到所有非零值的位置
一旦通过inRange
函数增加了范围以获得有意义的结果,只需使用findNonZero(掩码、位置)
要将位置
矩阵设置为N乘1,请键入CV_32SC2,位置矩阵 如果将0和1作为上下限,会发生什么情况?在传递它之前,您是否在map
上使用了imshow()
,以确保它看起来像您期望的那样?是否确实存在0到0.5范围内的值?例如,试试范围-255到+255。或者试试testMat=map最大值不包含imshow()显示的像素值,多亏了Mika,我使用了testMat=map