Пытаюсь калибровать камеру на предмет дисторсии по вот этому мануалу
https://docs.opencv.org/4.3.0/d4/d94/tutorial_camera_calibration.html
Когда использовал шахматный эталон - всё было ок, пока он был целиком в кадре, но висло намертво, когда часть эталона оказывалась вне кадра, пытаюсь сделать с кругами, пишут вроде что алгоритм более устойчивый, но он просто не находит цель, если не уменьшать размер изображения (примерно до 1024*768). Шаблон генерил с помощью скриптов OpenCV, пытался и симметричный и асимметричный использовать. Можно ли что-то сделать, чтобы нормально находить эталон на большом кадре? Или надо сильно уменьшать изображение, находить цель, потом брать базовое изображение, умножать все найденные координаты на коэффициент, с которым уменьшали изображение и запускать findCornersSubPix?
Асимметричный эталон использовал вот этот
Код вот такой:
cv::Size boardSize( 4, 11 );
cv::Mat image = cv::imdecode( cv::Mat( 1, data->size(), CV_8UC1, data->data() ), cv::IMREAD_COLOR );
std::vector< cv::Point2f > pointBuf;
bool found;
// int chessBoardFlags = cv::CALIB_CB_ADAPTIVE_THRESH | cv::CALIB_CB_NORMALIZE_IMAGE | cv::CALIB_CB_FAST_CHECK;
qDebug()«"Looking for corners";
// found = findChessboardCorners( image, boardSize, pointBuf, chessBoardFlags);
//found = findCirclesGrid( image, boardSize, pointBuf );
found = findCirclesGrid( image, boardSize, pointBuf, cv::CALIB_CB_ASYMMETRIC_GRID);