我正在开展一个人脸识别项目,我们正在使用PCA来减少图像的特征向量大小.问题是,在训练期间,我通过合并所有训练图像来创建PCA对象.现在,在测试期间,我需要先前获得的PCA对象.
我似乎无法弄清楚如何将PCA对象写入文件,以便我可以在测试期间使用它.另一种方法是我将它的特征向量写入文件.但是编写对象本身会更方便.有没有办法做到这一点?
据我所知,没有将PCA对象保存到文件的通用方法.您需要将特征向量,特征值和平均值保存到文件中,然后在加载后将它们放入新的PCA中.您必须记住使用不会丢失精度的格式,尤其是对于平均值.
这是一些示例代码:
#include "opencv2/core/core.hpp" #include... cv::PCA pca1; cv::PCA pca2; cv::Mat eigenval,eigenvec,mean; cv::Mat inputData; cv::Mat outputData1,outputData2; //input data has been populated with data to be used pca1(inputData,Mat()/*dont have previously computed mean*/, CV_PCA_DATA_AS_ROW /*depends of your data layout*/);//pca is computed pca1.project(inputData,outputData1); //here is how to extract matrices from pca mean=pca1.mean.clone(); eigenval=pca1.eigenvalues.clone(); eigenvec=pca1.eigenvectors.clone(); //here You can save mean,eigenval and eigenvec matrices //and here is how to use them to make another pca pca2.eigenvalues=eigenval; pca2.eigenvectors=eigenvec; pca2.mean=mean; pca2.project(inputData,outputData2); cv::Mat diff;//here some proof that it works cv::absdiff(outputData1,outputData2,diff); std::cerr<