3

我使用Ogre + OpenCV编写了一个简单的增强现实应用程序。一切正常,但我需要将 Ogre 的虚拟相机与我的真实相机相匹配

我不知道相机参数(这是一个便宜的网络摄像头,供应商没有提供它们)。我可以使用cvCalibrateCamera2(在此处cvFindChessboardCorners描述的一些之后)获得相机内在属性,并使用.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 的论坛中找到了一些东西,但这不起作用。我猜在 OpenCV 找到的 3x3 矩阵和Ogre::Camera.

我希望有一些方法可以使用cvCalibrateCamera2. 如果没有,我需要拿一把尺子和一个量角器并(大致)手动获取参数。

这是 3x3 “内在”矩阵:

836.391     0.000   460.430 
  0.000   836.391   281.440
  0.000     0.000     1.000
4

1 回答 1

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;

尝试 mat[2,2] 和 mat[3,2] 的负值和正值组合。

通常两者都有负值。其他参数可以忽略

于 2012-06-12T10:43:11.577 回答