OpenCV解决为任意系统返回常数值的问题?

时间:2019-01-28 22:09:21

标签: c++ opencv math linear-algebra equation

我将4x4矩阵初始化为单位矩阵。然后,我使用随机值初始化4x1向量B。而且我希望OpenCV解决系统Ax = B。

由于A是身份,所以我期望x = B。

但是我没有得到。首先我编写代码:

Mat A(Size(4,4), CV_64FC1);

// Identity matrix, by force
for(int i=0; i<4; i++) {
    for (int j=0; j<4; j++) {
        if(i=j=) A.at<float>(i,j) = 1;
        else A.at<float>(i,j) = 0;
    }
}

Mat B(Size(4, 1), CV_64FC1);

B.at<float>(0, 0) = 1;
B.at<float>(1, 0) = 2;
B.at<float>(2, 0) = 3;
B.at<float>(3, 0) = 4;

Mat sol(Size(4, 1), CV_64FC1);

solve(A, B, sol, DECOMP_LU);

上面的输出是sol = <02313,0,0,0>,而不是<1,2,3,4>

1 个答案:

答案 0 :(得分:1)

第一个大小将宽度作为第一个参数,然后将高度作为某种原因,但Mat先行,然后是cols,说实话这有点令人困惑x)

第二个64fc1是双倍的,我想其余部分都不会浮动

Mat A(Size(4, 4), CV_64FC1);

    // Identity matrix, by force
    for (int i = 0; i < 4; i++) {
        for (int j = 0; j < 4; j++) {
            if (i ==j) A.at<double>(i, j) = 1;
            else A.at<double>(i, j) = 0;
        }
    }
    Mat B(Size(1,4), CV_64FC1);

    B.at<double>(0, 0) = 1.0;
    B.at<double>( 1,0) = 2.0;
    B.at<double>(2, 0) = 3.0;
    B.at<double>(3, 0) = 4.0;

    Mat sol;

    solve(A, B, sol, DECOMP_LU);

    cout << sol << endl;