Я написал простое приложение дополненной реальности с помощью Ogre + OpenCV. Все работает, но мне нужно сопоставить виртуальную камеру Ogre с моей реальной камерой.OpenCV камеры матрица для встроенных функций проекционной матрицы Огре для дополненной реальности
Я не знаю параметров камеры (это недорогая веб-камера и поставщик не предоставляет их). Я могу получить встроенную камеру с cvCalibrateCamera2
(после некоторого cvFindChessboardCorners
, как описано here), и я сохраняю их с cvSave
.
cvCalibrateCamera2(objectPoints_, imagePoints_, pointCounts_,
imageSize, cameraMatrix, distortionCoeffs_, NULL,
NULL, CV_CALIB_FIX_ASPECT_RATIO);
cvSave(INTRINSIC_XML, intrinsicMatrix_);
AR приложение загружает внутреннюю матрицу:
CvMat* intrinsic = (CvMat*) cvLoad(INTRINSIC_XML);
Так intrinsic->data.db
является указателем на 9 длины массив в двойном (3x3)
Как я могу перевести это к Ogre::Matrix4
таким я могу используйте его с setCustomProjectionMatrix
.
Я нашел что-то в Ogre's Forum, но это не работает. Я предполагаю, что необходим другой шаг между матрицей 3x3, найденной OpenCV, и матрицей 4x4, необходимой для Ogre::Camera
.
Надеюсь, что есть способ сделать это с помощью встроенных значений, заданных cvCalibrateCamera2
. Если нет, мне нужно взять линейку и транспортир и получить параметры (грубо) вручную.
Это матрица 3х3 "встроенных функций":
836.391 0.000 460.430
0.000 836.391 281.440
0.000 0.000 1.000
Можно ли ввести фактические значения матрицы камеры? –
@SumeetJindal Я отредактировал вопрос, добавив intrinsics –