svd.cpp

来自「关于openCV的一个使用实例用opencv做矩阵的SVD分解」· C++ 代码 · 共 50 行

CPP
50
字号
//對稱矩陣奇異值分解
#include <cv.h>
#include <highgui.h>
#include <stdio.h>

void PrintMatrix(CvMat *Matrix,int Rows,int Cols);

double Array1[]={2,-2,4,-2,2,-4,4,-4,8};
int main()
{
    CvMat *Matrix1=cvCreateMat(3,3,CV_64FC1);
    CvMat *W=cvCreateMat(3,3,CV_64FC1);
    CvMat *V=cvCreateMat(3,3,CV_64FC1);
    CvMat *U=cvCreateMat(3,3,CV_64FC1);
    CvMat *V_T=cvCreateMat(3,3,CV_64FC1);
    CvMat *ResultMatrix=cvCreateMat(3,3,CV_64FC1);
	
    cvSetData(Matrix1,Array1,Matrix1->step);
	
    cvSVD(Matrix1,W,U,V);
	
    printf("\nW\n");
    PrintMatrix(W,W->rows,W->cols);
    printf("\nU\n");
    PrintMatrix(U,U->rows,U->cols);
    printf("\nV\n");
    PrintMatrix(V,V->rows,V->cols);
	
    printf("\nValid\n");
    cvmMul(U,W,ResultMatrix);
    cvTranspose(V,V_T);
    cvmMul(ResultMatrix,V_T,ResultMatrix);
    PrintMatrix(ResultMatrix,ResultMatrix->rows,ResultMatrix->cols);
	
    system("pause");
	
}

void PrintMatrix(CvMat *Matrix,int Rows,int Cols)
{
    for(int i=0;i<Rows;i++)
    {
        for(int j=0;j<Cols;j++)
        {
            printf("%.2f ",cvGet2D(Matrix,i,j).val[0]);
        }
        printf("\n");
    }
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?