寻找基本矩阵(矩阵乘法误差)

时间:2013-07-24 11:50:18

标签: c++ opencv matrix-multiplication

我正在尝试使用opencv进行3D重建,我几乎遵循了本书的所有步骤: RobertLaganière的OpenCV 2计算机视觉应用程序设计手册。

我的问题出现在试图找到基本矩阵时。我是这样做的:

  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的转置正确完成。 当我尝试获取Essential矩阵E时出现问题。运行程序时出现此错误 “OpenCV错误:断言失败(未知函数中键入== B&amp;&amp;&amp;&gt;,文件...... .... \ src \ opencv \ modules \ core \ src \ matmul.cpp,第711行”< / p>

我查了一下,我在这个问题中发现了类似的问题Opencv Matrix multiplication  但我试着做了答案所说的(改变矩阵类型),我仍然得到了同样的错误。

我也尝试使用Gemm进行矩阵乘法,但会出现相同的错误。

我真的可以使用一些帮助!先谢谢。

1 个答案:

答案 0 :(得分:0)

听起来好像K的类型不是双倍的(CV_64F);可能它是浮点数(CV_32F)。检查K.type() == CV_64F