c++ - OpenCV 解决任意系统的返回常量值?

标签 c++ opencv math linear-algebra equation

我将一个 4x4 矩阵初始化为单位矩阵。然后我用随机值初始化一个 4x1 vector 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>

最佳答案

出于某种原因,第一个尺寸将宽度作为第一个参数,然后是高度,但是 Mat 将行然后是列,老实说这有点令人困惑 x)

其次,64fc1 是双倍的,我想不会 float ,其余的工作正常

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;

关于c++ - OpenCV 解决任意系统的返回常量值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54411016/

相关文章:

c++ - glreadpixels 模板缓冲区总是抛出 GL_INVALID_OPERATION

c++ - 为什么模板实例化永远在这里进行?

c++ - xyx空间中的Octomap(八叉树)坐标

c++ - 漏洞?使用 findContours() 时增加每次迭代的内存使用量

python-2.7 - 在opencv上的Videocapture之后读取总是返回false

javascript - 什么是 JavaScript 中好的数学集实现?

c++ - 如何声明自引用模板类型

python - Python 上 OpenCV 中的 StereoCalibration

php - 如何计算 PHP 中一条直线上的点?

c - c中范围-5到5的数组的算术平均值