我需要弄清楚在我之前通过阈值算法放置的灰度图像上的任何给定像素是黑色还是白色。图像基本上变成了白色背景上的黑色斑点。
Mat falsetest;
...
cv::cvtColor(detected_edges, falsetest, CV_BGR2GRAY);
threshold(falsetest, falsetest,128, 255,THRESH_BINARY);
...
printf("x:%d y:%d %d\n",x,y,falsetest.at<uchar>(x,y));
我希望结果为0或255,但事实并非如此。不同像素的输出看起来像这样:
x:1259 y:175 111
x:1243 y:189 184
x:1229 y:969 203
x:293 y:619 255
x:1123 y:339 183
我是否试图以错误的方式做到这一点,或者错误似乎在其他地方?
答案 0 :(得分:1)
你确定falsetest
包含uchar像素,而不是浮点数吗?在这种情况下,您需要通过以下方式访问falsetest
的值:
falsetest.at<float>(x,y)
答案 1 :(得分:0)
CV代码看起来不错。但是,您在printf中使用%d来显示uchar。
使用%hhd或执行
static_cast<int>(falsetest.at<uchar>(x,y)).
答案 2 :(得分:0)
我终于找到了问题所在。当我打电话的时候我想到了
cv::cvtColor(detected_edges, falsetest, CV_BGR2GRAY);
所有矩阵数据都被复制到falsetest。然而,似乎并非如此,当我继续修改detected_edges时,falsetest也被污染了。克隆矩阵解决了这个问题。