Калибровка изображения / камеры с использованием пользовательского шаблона OpenCV - PullRequest
0 голосов
/ 11 июня 2019

Я прочитал этот пример от OpenCV относительно калибровки изображения с использованием шаблона шахматной доски. В статье предлагается использовать другой шаблон для калибровки функции:

Для стереофонических приложений эти искажения должны быть сначала исправлены. Чтобы найти все эти параметры, нам нужно предоставить несколько образцов четко определенного шаблона (например, шахматная доска). Мы находим в этом некоторые конкретные моменты (квадратные углы на шахматной доске). Мы знаем его координаты в пространстве реального мира и знаем его координаты в изображении. С этими данными в фоновом режиме решается некоторая математическая задача для получения коэффициентов искажения. Это краткое изложение всей истории. Для достижения лучших результатов нам нужно как минимум 10 тестовых шаблонов.

но это не входит в подробности о том, как это сделать.

Существуют ли openCV (или любые другие библиотечные функции), которые позволяют мне это делать?

1 Ответ

0 голосов
/ 11 июня 2019

Большая часть работы уже выполнена в образце OpenCV, например:

https://github.com/opencv/opencv/blob/master/samples/cpp/calibration.cpp

Внутри вы можете напрямую выбрать, какой шаблон вы используете

"Usage: calibration\n"
        "     -w=<board_width>         # the number of inner corners per one of board dimension\n"
        "     -h=<board_height>        # the number of inner corners per another board dimension\n"
        "     [-pt=<pattern>]          # the type of pattern: chessboard or circles' grid\n"

КогдаВы вызываете этот сценарий, просто передаете аргумент -pt = circle

, если вы выполняете его самостоятельно, его также довольно легко выбрать

bool found;
switch( pattern )
{
    case CHESSBOARD:
        found = findChessboardCorners( view, boardSize, pointbuf,
            CALIB_CB_ADAPTIVE_THRESH | CALIB_CB_FAST_CHECK | CALIB_CB_NORMALIZE_IMAGE);
        break;
    case CIRCLES_GRID:
        found = findCirclesGrid( view, boardSize, pointbuf );
        break;
    case ASYMMETRIC_CIRCLES_GRID:
        found = findCirclesGrid( view, boardSize, pointbuf, CALIB_CB_ASYMMETRIC_GRID );
        break;
    default:
        return fprintf( stderr, "Unknown pattern type\n" ), -1;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...