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 Error: Assertion failed (type == B<> && > in unknown function, file .. ....\src\ opencv\modules\core\src\matmul.cpp,第 711 行"

我查了一下,在这个问题Opencv Matrix multiplication中发现了一个类似的问题, 但是我尝试按照答案所说的去做(更改矩阵类型),但仍然遇到相同的错误。

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

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

4

1 回答 1

0

听起来好像类型K不是双精度(CV_64F);可能是浮点数(CV_32F)。检查那个K.type() == CV_64F

于 2013-07-24T13:04:57.950 回答