У меня странная проблема с компаратором матрицы 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?
замените код на: 'std :: cout << mask;', и все должно быть хорошо. – lanpa