当前位置:   article > 正文

opencv/C++ 进行数据的PCA降维_opencv pca降维 c++

opencv pca降维 c++
  1. #include <iostream>
  2. #include <string>
  3. #include <iostream>
  4. #include <vector>
  5. #include <opencv/cv.h>
  6. #include <opencv/highgui.h>
  7. #include <opencv/ml.h>
  8. #include <string>
  9. #include <opencv/cv.h>
  10. #include <opencv/highgui.h>
  11. #include <opencv/ml.h>
  12. using namespace std;
  13. using namespace cv;
  14. int main()
  15. {
  16. //待降维的训练数据(此转载自其他地方,出处忘了)
  17. float Coordinates[7*31] = {
  18. 101.5, 100.4, 97.0, 98.7, 100.8, 114.2, 104.2
  19. , 100.8, 93.5, 95.9, 100.7, 106.7, 104.3, 106.4
  20. , 100.8, 97.4, 98.2, 98.2, 99.5, 103.6, 102.4
  21. , 99.4, 96.0, 98.2, 97.8, 99.1, 98.3, 104.3
  22. , 101.8, 97.7, 99.0, 98.1, 98.4, 102.0, 103.7
  23. , 101.8, 96.8, 96.4, 92.7, 99.6, 101.3, 103.4
  24. , 101.3, 98.2, 99.4, 103.7, 98.7, 101.4, 105.3
  25. , 101.9, 100.0, 98.4, 96.9, 102.7, 100.3, 102.3
  26. , 100.3, 98.9, 97.2, 97.4, 98.1, 102.1, 102.3
  27. , 99.3, 97.7, 97.6, 101.1, 96.8, 110.1, 100.4
  28. , 98.7, 98.4, 97.0, 99.6, 95.6, 107.2, 99.8
  29. , 99.7, 97.7, 98.0, 99.3, 97.3, 104.1, 102.7
  30. , 97.6, 96.5, 97.6, 102.5, 97.2, 100.6, 99.9
  31. , 98.0, 98.4, 97.1, 100.5, 101.4, 103.0, 99.9
  32. , 101.1, 98.6, 98.7, 102.4, 96.9, 108.2, 101.7
  33. , 100.4, 98.6, 98.0, 100.7, 99.4, 102.4, 103.3
  34. , 99.3, 96.9, 94.0, 98.1, 99.7, 109.7, 99.2
  35. , 98.6, 97.4, 96.4, 99.8, 97.4, 102.1, 100.0
  36. , 98.2, 98.2, 99.4, 99.3, 99.7, 101.5, 99.9
  37. , 98.5, 96.3, 97.0, 97.7, 98.7, 112.6, 100.4
  38. , 98.4, 99.2, 98.1, 100.2, 98.0, 98.2, 97.8
  39. , 99.2, 97.4, 95.7, 98.9, 102.4, 114.8, 102.6
  40. , 101.3, 97.9, 99.2, 98.8, 105.4, 111.9, 99.9
  41. , 98.5, 97.8, 94.6, 102.4, 107.0, 115.0, 99.5
  42. , 98.3, 96.3, 98.5, 106.2, 92.5, 98.6, 101.6
  43. , 99.3, 101.1, 99.4, 100.1, 103.6, 98.7, 101.3
  44. , 99.2, 97.3, 96.2, 99.7, 98.2, 112.6, 100.5
  45. , 100.0, 99.9, 98.2, 98.3, 103.6, 123.2, 102.8
  46. , 102.2, 99.4, 96.2, 98.6, 102.4, 115.3, 101.2
  47. , 100.1, 98.7, 97.4, 99.8, 100.6, 112.4, 102.5
  48. , 104.3, 98.7, 100.2, 116.1, 105.2, 101.6, 102.6
  49. };
  50. //测试降维用的特征向量
  51. float Coordinates_test[7*2] = {104.3, 98.7, 100.2, 116.1, 105.2, 101.6, 102.6,};
  52. //将待测试数组转为mat数组
  53. Mat pcaSet(31, 7, CV_32FC1); //原始数据
  54. Mat Coordinates1(1, 7, CV_32FC1);
  55. for (int i = 0; i < 31; i++)
  56. for (int j = 0; j < 7; j++)
  57. pcaSet.at<float>(i, j) = Coordinates[i*j + j];
  58. for (int i = 0; i < 1; i++)
  59. for (int j = 0; j < 7; j++)
  60. Coordinates1.at<float>(i, j) = Coordinates_test[i*j + j];
  61. //降维处理,生成降维所需的特征向量:
  62. int pca_num = 5;//降至5维
  63. cout << "正在进行PCA降维..." << endl;
  64. PCA pca(pcaSet, Mat(), CV_PCA_DATA_AS_ROW, pca_num);
  65. Mat eigenvectors = pca.eigenvectors.clone();//eigenvectors用来存放降维后的特征向量
  66. FileStorage f_pca("eigenvectors.xml", FileStorage::WRITE);
  67. f_pca << "eigenvectors" << eigenvectors;
  68. f_pca.release();
  69. //读取上面的特征向量,对输入数据进行真正的降维处理:
  70. FileStorage f_pca("eigenvectors.xml", FileStorage::READ);
  71. f_pca["eigenvectors"] >> eigenvectors;
  72. f_pca.release();
  73. Mat data_to_pca = eigenvectors*Coordinates1.t();//对特征向量进行降维
  74. //保存数据
  75. FileStorage save_data("data_to_pca .xml", FileStorage::WRITE);
  76. save_data<< "data_to_pca " << data_to_pca ;
  77. save_data.release();
  78. return 0;
  79. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/222068
推荐阅读
相关标签
  

闽ICP备14008679号