3

Ogre + OpenCVを使用して単純な拡張現実アプリケーションを作成しました。すべてが機能していますが、Ogre の仮想カメラを実際のカメラに一致させる必要があります

カメラのパラメーターがわかりません (これは安価な Web カメラであり、ベンダーはそれらを提供していません)。私は(ここで説明されているcvCalibrateCamera2いくつかの後)でカメラ固有のものを取得することができ、それらをで保存します。cvFindChessboardCornerscvSave

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 マトリックスと で必要な 4x4 マトリックスの間には、別の手順が必要だと思います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 に答える