OpenCV相机内在矩阵到用于增强现实的食人魔投影矩阵

OpenCV camera intrinsics matrix to Ogre projection matrix for Augmented reality

本文关键字:增强现实 食人魔 投影 用于 相机 OpenCV      更新时间:2023-10-16

我用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一起使用.

我在食人魔论坛中找到了一些东西,但这不起作用。我想在 OpenCV 找到的 3x3 矩阵和 Ogre::Camera 需要的 4x4 矩阵之间还需要其他一些步骤。

我希望有一些方法可以用cvCalibrateCamera2给出的内在来做到这一点。如果没有,我需要拿一把尺子和一个量角器,(大致)手动获取参数。

这是 3x3 "内部函数"矩阵:

836.391     0.000   460.430 
  0.000   836.391   281.440
  0.000     0.000     1.000

按如下方式创建投影矩阵。

垫[0,0] = FX

垫[1,1] = fy

垫子[2,2] = +- .01

垫[3,2] = +- 1

垫[3,3] = 0

哪里fx = 内在 [0]/图像大小.宽度;

fy = 内在 [1*3 + 1]/图像大小.高度;

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

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