1

我需要弄清楚我之前通过阈值算法处理的灰度图像上的任何给定像素是黑色还是白色。图像基本上变成白色背景上的黑色斑点。

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

我是否试图以错误的方式做到这一点,或者似乎错误出在其他地方?

4

3 回答 3

1

你确定它falsetest包含 uchar 像素,而不是浮点数吗?在这种情况下,您需要访问以下值falsetest

falsetest.at<float>(x,y)
于 2012-09-04T13:06:41.100 回答
0

CV 代码看起来不错。但是,您在 printf 中使用 %d 来显示 uchar。

要么使用 %hhd 要么做

static_cast<int>(falsetest.at<uchar>(x,y)).
于 2012-09-03T20:20:29.810 回答
0

我终于弄清楚了问题所在。我以为我打电话的时候

cv::cvtColor(detected_edges, falsetest, CV_BGR2GRAY); 

所有的矩阵数据都被复制到 falsetest。然而,似乎并非如此,当我着手修改检测到的边缘时,错误测试也被污染了。克隆矩阵解决了这个问题。

于 2012-09-11T16:57:56.747 回答