OpenCV решить вернуть значение константы для произвольной системы? - PullRequest
0 голосов
/ 29 января 2019

Я инициализирую матрицу 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 голосов
/ 29 января 2019

Первый размер принимает ширину в качестве первого параметра, а затем высоту по какой-то причине, но Мэт принимает строки, а затем столбцы, что немного смущает, если честно. 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;
...