opencv中的简单矩阵乘法失败

时间:2016-09-17 07:13:00

标签: opencv matrix-multiplication matrix-math

我做以下

    Mat xOld,xNew;
for(uint i=0;i<inliers.size();i++){
    if(inliers[i]){
        double xOld_arr[3]={kpOld[i].pt.x,kpOld[i].pt.y,1};
        double xNew_arr[3]={kpNew[i].pt.x,kpNew[i].pt.y,1};
        Mat xo(1,3,CV_64FC1,xOld_arr),xn(1,3,CV_64FC1,xNew_arr);
        xNew.push_back(xn);
        xOld.push_back(xo);
    }
}
xNew=xNew.t();
cout<<F.size()<<" "<<xNew.size();
Mat t=xNew*F;

输出

 [3 x 3] [24 x 3]OpenCV Error: Assertion failed (a_size.width == len) in gemm, file /home/flex/test/opencv/modules/core/src/matmul.cpp, line 1537
 terminate called after throwing an instance of 'cv::Exception'
 what():  /home/flex/test/opencv/modules/core/src/matmul.cpp:1537:    error: (-215) a_size.width == len in function gemm

我错过了什么?当我乘以矩阵不应该是正确的。原因xNew具有相同的colums和F相同的行?

1 个答案:

答案 0 :(得分:1)

F是什么类型的?

所以F是3行,3列。 xNew(转置后)是3行,24列。现在你尝试乘法(矩阵表示法:行x列)3x24 * 3x3,这是未定义的。矩阵乘法是大小:N×M * M×O => NxO矩阵。如果你不进行转置,你应该能够将两个矩阵相乘,但我无法告诉你这是否是你想要的乘法。

可能混淆在这一行:xn(1,3,CV_64FC1,xNew_arr)在这里您创建一个包含1行和3列的矩阵,然后将此行添加到xNew。