Матричный компаратор 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");
}

Вывод тестовой матрицы правильный. Тем не менее, удивительно, что матрица маски — все нули. Разве он не должен возвращать матрицу размера 3×3 с элементом, равным единице, если соответствующий элемент в тестовой матрице больше 2, и равен нулю, если тестовая матрица меньше 2? Почему в результате получается матрица 3х3 со всем элементом в нуле?

Еще одна странная вещь, что если я заменю маску на:

Mat mask = (test < 8);

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

nan 0.000000 0.000000
nan 0.000000 0.000000
0.000000 0.000000 0.000000

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

0

Решение

Вывод логического оператора представляет собой символ без знака, а не double. Попробуйте использовать uchar вместо double с оператором at.

4

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector