2011-08-11 8 views
3

3x3回転行列Rと3x1変換行列Tが与えられたら、T行列とR行列を画像に乗算する方法が不思議ですか?OpenCVを使用した3Dでの画像の翻訳と回転

はIplImageへのIMGがR*(T*img)私は何をしたいです640×480

であると言うことができます。

私はcvGemmの使用を考えていましたが、うまくいかなかったのです。

+2

答えがあなたに役立つのですか?私に知らせてくれないと、私は説明するつもりです。 Julien – jmartel

答えて

4

あなたはおそらくwarpPerspective(あるを探している機能):このユースケースである...

// Projection 2D -> 3D matrix 
     Mat A1 = (Mat_<double>(4,3) << 
      1, 0, -w/2, 
      0, 1, -h/2, 
      0, 0, 0, 
      0, 0, 1); 

// Rotation matrices around the X axis 
     Mat R = (Mat_<double>(4, 4) << 
      1,   0,   0, 0, 
      0, cos(alpha), -sin(alpha), 0, 
      0, sin(alpha), cos(alpha), 0, 
      0,   0,   0, 1); 

// Translation matrix on the Z axis 
     Mat T = (Mat_<double>(4, 4) << 
      1, 0, 0, 0, 
      0, 1, 0, 0, 
      0, 0, 1, dist, 
      0, 0, 0, 1); 

// Camera Intrisecs matrix 3D -> 2D 
     Mat A2 = (Mat_<double>(3,4) << 
      f, 0, w/2, 0, 
      0, f, h/2, 0, 
      0, 0, 1, 0); 

Mat transfo = A2 * (T * (R * A1)); 

Mat source; 
Mat destination; 

warpPerspective(source, destination, transfo, source.size(), INTER_CUBIC | WARP_INVERSE_MAP); 

私はそれはあなたを助けることができる願って、

ジュリアン

PS:I 2Dから3Dへの投影を例に挙げましたが、直接transfo = T * Rを使用することができます。

+0

私はこのリンクhttp://jepsonsblog.blogspot.in/2012/11/rotation-in-3d-using-opencvs.htmlに従ってきましたが、私は何を入力する必要があるのか​​分かりません。私は数を数えてみましたが成功することはできませんでした。私の意図は、与えられた画像をy軸に沿って回転させることです。 – 2vision2

+1

ここではA1行列が間違っています.3行目にもう1つの行列が必要です。この回答をお聞かせください:https://stackoverflow.com/questions/17087446/how-to-calculate-perspective-transform-for-opencv-from-rotation-angles –

+0

ごめんなさい...あなたの方法はあなたがz = 0から大きなz-translationでカメラ(または画像)を戻す限り、 –

関連する問題