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 }