1

私はopencvを使用して3D再構成を行おうとしています.Robert LaganièreによるOpenCV 2 Computer Vision Application Programming Cookbookの本のすべての手順に従っています。

私の問題は、エッセンシャル マトリックスを見つけようとするときに発生します。私はこのようにします:

  Mat fundemental= ransacTest(symMatches,keypoints1, keypoints2, outmatches);
 //ransacTest function by Computer Vision Application Programming Cookbook 

 cout<<endl<<fundemental<<endl;

 Mat  K=m_camera_data->get_K();
 //get_K() function defined previously 
 cout<<K<<endl;

 cout<<"K.T"<<K.t()<<endl;

 Mat_<double>  E = K.t() *fundemental* K; // Error   

関数 ransacTest と get_K() は以前に定義されており、正常に動作しているようです。私の基本的なマトリックスは次のとおりです

-7.65924601845777e-006   0.0052097327886         -0.179203748284864
-0.005202223611495075    -8.913278071309e-006    -0.5024237005766097
0.1843335279902164       0.4908219843516384       1

私のK行列は次のとおりです

 382.5   0    160

 0       0    120

 0       0     1

K の転置は正しく行われます。エッセンシャル マトリックス E を取得しようとすると問題が発生します。プログラムを実行すると、「OpenCV エラー: アサーションに失敗しました (type == B<> && > in unknown function, file .. ....\src\ opencv\modules\core\src\matmul.cpp、711 行目"

私はそれを調べて、この質問Opencv Matrix multiplicationで同様の問題を見つけました が、答えが言ったことを実行しようとしました(行列タイプを変更します)、それでも同じエラーが発生しました。

Gemm を使用して行列の乗算を実行しようとしましたが、同じエラーが表示されます。

私は本当にいくつかの助けを借りることができました!前もって感謝します.

4

1 に答える 1

0

の型がKdouble でない場合 (CV_64F) のように聞こえます。おそらくフロート(CV_32F)です。それを確認してくださいK.type() == CV_64F

于 2013-07-24T13:04:57.950 に答える