2014-09-10 3 views
0

У меня странная проблема с компаратором матрицы OpenCV. Мой код очень прост, но, похоже, 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"); 
} 

Выход тестовой матрицы является правильным. Однако, удивительно, что матрица маски - это все нули. Не следует ли вернуть матрицу размером 3x3 с элементом равным единице, если соответствующий элемент в тестовой матрице больше 2 и равен нулю, если тестовая матрица меньше 2? Почему результатом является матрица 3x3 со всем элементом в ноль?

Другая странная вещь, что если я заменить маску быть:

Mat mask = (test < 8); 

, что я ожидал, это матрица 3х3 со всеми элементами равна единице. Однако он дает следующий результат:

nan 0.000000 0.000000 
nan 0.000000 0.000000 
0.000000 0.000000 0.000000 

Как это могло случиться? почему есть некоторые элементы, равные nan? Это большая ошибка в OpenCV?

+0

замените код на: 'std :: cout << mask;', и все должно быть хорошо. – lanpa

ответ

4

Результат булевого оператора - это символ без знака, а не двойной. Попробуйте использовать uchar вместо double с оператором at.

Смежные вопросы