1 #include <iostream> 2 #include "opencv2/opencv.hpp" 3 const int ROW = 2; 4 const int COL = 5; 5 //PCA 6 int main() 7 { 8 float m_matrix[ROW][COL] = { { -1, -1, 0, 2, 0 }, {-2, 0, 0, 1, 1} },mROWmean[ROW][1]; 9 float m_sum=0; 10 cv::Mat eigenvalues, eigenvectors, k_matrix,pca_matrix; 11 cv::Mat mMatrix(cv::Size(COL,ROW),CV_32FC1,m_matrix); 12 std::cout << mMatrix << std::endl;//原始矩阵 13 for (int i = 0; i < ROW; i++) 14 { 15 for (int j = 0; j < COL; j++) 16 { 17 m_sum += mMatrix.at<float>(i, j); 18 } 19 mROWmean[i][1] = m_sum/COL; 20 m_sum = 0; 21 for (int k = 0; k < COL; k++) 22 { 23 mMatrix.at<float>(i,k) -= mROWmean[i][1]; 24 } 25 } 26 //std::cout << mMatrix << std::endl;//减去行均值后的矩阵 27 cv::Mat covar = (mMatrix*mMatrix.t()) / (mMatrix.cols);//计算协方差 28 //std::cout << covar << std::endl; 29 cv::eigen(covar,eigenvalues,eigenvectors);//计算特征向量和特征值 30 //std::cout << eigenvectors << std::endl; 31 /*for (int i = 0; i < eigenvectors.cols; i++) 32 { 33 k_matrix.at<float>(0, i) = eigenvectors.at<float>(0,i); 34 }*/ 35 pca_matrix = eigenvectors.row(0)*mMatrix; 36 std::cout << pca_matrix << std::endl; 37 system("pause"); 38 return 0; 39 }