使用OpenCV求模拟矩阵的逆矩阵

OpenCV中,使用cvInvert函数,可以求解举证的模拟逆矩阵。

 

cvInvert共有三个参数。

 

第一个参数, 待求解的矩阵

第二个参数, 逆矩阵

第三个参数, 求解方式 可选值   CV_LU,  CV_SVD,  CV_SVD_SYM

 

CV_LU :  高斯消去法 (LU 分解)
CV_SVD : 奇异值分解(SVD)
CV_SVD_SYM : 对称矩阵的SVD

 

 

代码如下:

 

#include

#include

#include

 

void matSet(CvMat *mat,  float value[])
{
    int k = 0;
    for (int i = 0; i < mat->rows; i++) {
        for (int j = 0; j < mat->cols; j++) {
            cvmSet (mat, i, j, value[k++]);
        }
    }
}


// Print Matrix
void printMatrix(CvMat *mat)
{
    int k = 0;
    for (int i = 0; i < mat->rows; i++) {
        for (int j = 0; j < mat->cols; j++) {
        printf(" %10.3f ",  cvmGet(mat, i, j));
        }
        printf("/n");
    }
}


void main()
{


    CvMat *matrix  = cvCreateMat(4, 3, CV_32FC1);

    CvMat *inverse  = cvCreateMat(3, 4, CV_32FC1);

    float matrixA[] = {1,0,0,  0,2,0, 0,0,3, 0,0,0};

    matSet(matrix, matrixA);

 

   //CV_LU :  高斯消去法 (LU 分解)

   //CV_SVD : 奇异值分解(SVD)

   //CV_SVD_SYM : 对称矩阵的SVD

   cvInvert(matrix, inverse, CV_SVD);

    printf(" Matrix::  /n ");
    printMatrix(matrix);

    printf(" Inverse Matrix::  /n ");
    printMatrix(inverse);

    cvReleaseMat(&matrix);
    cvReleaseMat(&inverse);

    return;
}

你可能感兴趣的:(使用OpenCV求模拟矩阵的逆矩阵)