寻找基本矩阵(矩阵乘法错误)
Posted
技术标签:
【中文标题】寻找基本矩阵(矩阵乘法错误)【英文标题】:Finding Essential matrix (Matrix Multiplication Error) 【发布时间】:2013-07-24 11:50:17 【问题描述】:我正在尝试使用 opencv 进行 3D 重建,并且我几乎按照书中的所有步骤进行操作: OpenCV 2 计算机视觉应用程序编程食谱,作者 Robert Laganière。
我的问题是在尝试查找基本矩阵时出现的。我是这样做的:
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 错误:断言失败(类型 == B && > 在未知函数中,文件 .. ....\src\opencv\modules\core\src\matmul.cpp,第 711 行”
我查了一下,发现这个问题Opencv Matrix multiplication也有类似的问题 但是我尝试按照答案所说的去做(更改矩阵类型),但仍然遇到同样的错误。
我也试过用Gemm做矩阵乘法,但出现同样的错误。
我真的需要一些帮助!在此先感谢。
【问题讨论】:
【参考方案1】:这听起来好像K
的类型不是双精度(CV_64F);可能是浮点数(CV_32F)。检查K.type() == CV_64F
。
【讨论】:
我刚刚检查过,它是浮动的!谢谢你!我刚刚解决了这个问题。这确实是我的基础和我的 K 的矩阵类型问题。我现在所做的只是每次都将基础声明为 Mat_以上是关于寻找基本矩阵(矩阵乘法错误)的主要内容,如果未能解决你的问题,请参考以下文章