После обновления мои модульные тесты для калибровки камеры начали давать сбой, потому что
findChessboardCorners(...) теперь постоянно возвращает false для одних и тех же входных изображений и параметров.
Никаких изменений в коде не было — была обновлена только версия OpenCV.
Минимальный пример:
Код: Выделить всё
Mat img = imread("chessboard.jpg");
Size patternSize(13, 9);
vector
corners;
int flags = CV_CALIB_CB_ADAPTIVE_THRESH | CV_CALIB_CB_FAST_CHECK | CV_LIB_CB_NORMALIZE_IMAGE;
bool found = findChessboardCorners(img, patternSize, corners, flags);
drawChessboardCorners(img, patternSize, corners, found);
imshow("img", img);
waitKey();

ожидаемый результат:

В OpenCV 4.8 все углы найдены и нарисованы правильно, в OpenCV 4.12 обнаружено ложное значение.
Дополнительное наблюдение:
Если я изменю размер того же входного изображения до 266×200 пикселей перед вызовом findChessboardCorners, я снова получу истину, но обнаруженные углы будут гораздо менее точными (и непригодными для использования в моих целях). случай).
Мои вопросы:
- Были ли критические изменения или более строгие критерии проверки, введенные в findChessboardCorners между OpenCV 4.8 и 4.12?
- Есть ли способ получить больше диагностической информации (например, частичное обнаружение углов, коды ошибок или почему обнаружение не удалось)?
Подробнее здесь: https://stackoverflow.com/questions/797 ... o-4-12-sam
Мобильная версия