0

私はOpenCVを使用して拡張現実マーカー検出プログラムに取り組んでおり、同じマーカーに対して2つの異なる回転値と平行移動値を取得しています。

3Dモデルは、カメラを少し動かすと、制御なしでこれらの状態を自動的に切り替えます。上記の2つの状況のスクリーンショットを以下に追加します。Image#1を正しいものにしたいと思います。これを修正する方法と場所は?

AndroidのOpenGLESでOpenCVの回転と平行移動のベクトルを使用する方法をフォローしましたか?OpenGLのプロジェクションマトリックスを作成します。元:

// code to convert rotation, translation vector
glLoadMatrixf(ConvertedProjMatrix);
glColor3f(0,1,1) ;
glutSolidTeapot(50.0f);

画像#1 ここに画像の説明を入力してください

画像#2 ここに画像の説明を入力してください

追加

ティーポットをマーカー面に置く方法を誰かが提案してくれたら嬉しいです。回転行列を編集する必要があることはわかっています。しかし、それを行うための最良の方法は何ですか?

4

2 に答える 2

0

ティーポットを回転させるには、glRotatef()を使用できます。たとえば、現在の行列をy軸を中心に125°回転させたい場合は、次のように呼び出すことができます。

glRotate(125,0,1,0);

ティーポットの現在の向きはわかりませんが、x軸を中心に90°回転させる必要があると思います。

私はあなたの最初の問題についてはわかりません。OpenCVは、表示されている位置のどれが「正しい」位置であるかを判断できないようです。これは、OpenCVが探している機能の種類(エッジ、高コントラスト、独自のポイントなど)と、それをどのように実装したかによって異なります。

于 2011-11-19T19:24:51.807 に答える
0

ポーズ アルゴリズム (ITERATIVE、EPNP、P3P) を交換しようとしましたか? または、前の計算の値を使用することもできます。これは、「最良の推測」を提供しているだけであることを忘れないでください。

于 2012-08-22T11:56:10.527 に答える