我正在尝试使用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进行矩阵乘法,但会出现相同的错误。
我真的可以使用一些帮助!先谢谢。
答案 0 :(得分:0)
听起来好像K
的类型不是双倍的(CV_64F);可能它是浮点数(CV_32F)。检查K.type() == CV_64F
。