OpenCV矩阵比较器不能正常工作吗?

时间:2014-09-10 04:15:16

标签: c++ opencv matrix

我在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中的一个大错误吗?

1 个答案:

答案 0 :(得分:4)

布尔运算符的输出是unsigned char,而不是double。尝试使用uchar而不是使用at运算符的双倍。