2012-06-11 2 views
3

Я написал простое приложение дополненной реальности с помощью 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 
+0

Можно ли ввести фактические значения матрицы камеры? –

+0

@SumeetJindal Я отредактировал вопрос, добавив intrinsics –

ответ

2

Создать проекционную матрицу следующим образом.

мат [0,0] = FX

мат [1,1] = FY

мат [2,2] = + - .01

мат [3,2] = + - 1

мат [3,3] = 0

где FX = характеристическая [0]/imageSize.Width;

fy = внутренне [1 * 3 + 1]/imageSize.Height;

Попробуйте комбинации отрицательных и положительных значений для мата [2,2] и мата [3,2].

Обычно оба значения будут иметь отрицательные значения. Другие параметры могут быть проигнорированы

+0

Пожалуйста, вы можете это объяснить? мат [2,2] связан с расстоянием ближнего/дальнего клипа? –

+0

Да Z = коврик [3,2] * ZObject + мат [3,3]. near = (0 - мат [3,3])/мат [3,2] –

+0

far = (1 - мат [3,3])/мат [3,2] –

 Смежные вопросы

  • Нет связанных вопросов^_^