我使用 Ogre + OpenCV 编写了一个简单的增强现实应用程序。一切正常,但我需要将Ogre的虚拟相机与我的真实相机相匹配
我不知道相机参数(这是一个廉价的网络摄像头,供应商不提供它们)。我可以使用cvCalibrateCamera2
(在here之后的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长度数组double(3x3矩阵)的指针
如何将其翻译为Ogre::Matrix4
,我可以将其与setCustomProjectionMatrix
一起使用。
我在Ogre's Forum找到了一些东西,但这不起作用。我想在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 :(得分:2)
按如下方式创建投影矩阵。
mat [0,0] = fx
mat [1,1] = fy
mat [2,2] = + - .01
mat [3,2] = + - 1
mat [3,3] = 0
,其中 fx = intrinsic [0] / imageSize.Width;
fy = intrinsic [1 * 3 + 1] / imageSize.Height;
尝试mat [2,2]和mat [3,2]的负值和正值的组合。
通常两者都有负值。 其他参数可以忽略