У меня странная проблема с матричным компаратором 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?
Вывод логического оператора представляет собой символ без знака, а не double. Попробуйте использовать uchar вместо double с оператором at.