我在OpenCV矩阵比较器上有一个奇怪的问题。我的代码非常简单,但似乎OpenCV未能给出正确的答案。这是OpenCV的错误吗?
Mat test = (Mat_<double>(3, 3) << 1, 0, 3, 2, 5, 6, 1, 1, 7);
printf("Test matrix!\n");
for(int i=0; i<3; i++) {
for(int j=0; j<3; j++) {
printf("%f ", test.at<double>(i, j));
}
printf("\n");
}
Mat mask = (test > 2);
for(int i=0; i<mask.rows; i++) {
for(int j=0; j<mask.cols; j++) {
printf("%f ", mask.at<double>(i,j));
}
printf("\n");
}
测试矩阵输出正确。然而,发现掩模矩阵都是零是令人惊讶的。如果测试矩阵中的对应元素大于2并且如果测试矩阵小于2,则它不应返回大小为3x3且元素等于1的矩阵吗?为什么结果是3x3矩阵,所有元素都为零?
另一个奇怪的事情是,如果我将面具替换为:
Mat mask = (test < 8);
我所期望的是3x3矩阵,所有元素都等于1。但是,它给出了以下结果:
nan 0.000000 0.000000
nan 0.000000 0.000000
0.000000 0.000000 0.000000
怎么会发生这种情况?为什么有些元素等于nan?这是OpenCV中的一个大错误吗?
答案 0 :(得分:4)
布尔运算符的输出是unsigned char,而不是double。尝试使用uchar而不是使用at运算符的双倍。