opencv PCA算法
来源:互联网 发布:矩阵中rank什么意思 编辑:程序博客网 时间:2024/05/23 19:44
#include <iostream>#include <opencv2/opencv.hpp>#include <sstream>using namespace std;using namespace cv;//PCA算法的实现和总结int main(){//文件路名的前缀string filename = "C:/Users/Administrator/Desktop/标准测试图片/CMU_PIE_Face/CMU_PIE_Face/Pose07_64x64_files/";//选择20幅影像 d=20vector<Mat> Images;//影像的集合for (int i = 11; i <= 220;i+=11)//这里仅仅是寻找影像的文件名,因为是以数字命名的,所以有这样的表达式,可以跳过{string name("");ostringstream os;os << i;name = os.str() + ".jpg";Mat temp = imread(filename+name, IMREAD_GRAYSCALE);//以灰度影像的方式进行读取if (temp.empty()){continue;//如果读取失败,那么就继续下一副进行读取}//temp.convertTo(temp, CV_32FC1);//转换为浮点数Images.push_back(temp);}//将影像合并成一幅影像,影像的大小为M*N,将这幅影像合并成一行数据 读取影像是64*64=4096if (Images.empty()){return -1;//影像读取全部失败了}Mat BigImage = Mat(Images.size(), Images[0].cols*Images[0].rows, CV_32FC1);//大影像的大小为20 * 4096//填充这一幅大影像for (size_t i = 0; i < Images.size();++i){//将每一幅影像的数据合并到大影像的行中//Mat xi = BigImage.row(i);Images[i].reshape(1, 1).convertTo(BigImage.row(i), CV_32FC1);}//现在可以进行PCA处理了PCA pca(BigImage, noArray(), PCA::DATA_AS_ROW);//PCA 构造函数Mat EigenValue = pca.eigenvalues.clone();//大小是20*1//统计特征能量大于95%的成分double Sum = 0;for (size_t i = 0; i < Images.size();++i){Sum += EigenValue.at<float>(i);}double Radio = 0.95;int index = 0;double Add = 0;while (Add/Sum<0.95){Add += EigenValue.at<float>(index);++index;}//重新进行PCA分析PCA pca1(BigImage, noArray(), PCA::DATA_AS_ROW,index);//PCA 构造函数----其中index =11 占有95的能量//上述的函数PCA的构造函数中,也有另一个构造函数,最后一个参数是double类型,占有的比率,这里写出的原因的,是想看看//一般特征值在前几个占的比率比较大FileStorage fs;//将训练的PCA结果保存下来,以方便以后使用fs.open("PCA.xml", FileStorage::WRITE);if (fs.isOpened()){pca1.write(fs);fs.release();}//特征向量大小为20*4096Mat mean = pca1.mean.clone().reshape(0,Images[0].rows);//均值影像//归一化处理Mat dst;normalize(mean, dst, 0, 255, NORM_MINMAX,CV_8UC1);//这个在不同类型的时候,不支持in-place操作imshow("mean", dst);Mat FirstImage = pca1.project(BigImage.row(0));//将第一幅原始影像投影到PCA中 投影之后的维度为1*11 (11是上述提取的最大主成分量)Mat FirstResult = pca1.backProject(FirstImage);//反向投影,是为了看看影像的结果Mat result=FirstResult.reshape(0, Images[0].rows);Mat dst1;normalize(result, dst1, 0, 255, NORM_MINMAX,CV_8UC1);imshow("tile", dst1);//查看第一个特征量-主特征脸Mat EigenFace = pca.eigenvectors.row(0).reshape(0, Images[0].rows);Mat dst2;normalize(EigenFace, dst2, 0, 255, NORM_MINMAX, CV_8UC1);imshow("Eigen0", dst2);waitKey(0);return 0;}
1 0
- Opencv中的pca算法
- opencv学习-算法-pca
- opencv PCA算法
- PCA算法与Opencv实现
- OpenCV学习(35) OpenCV中的PCA算法
- PCA算法学习_1(OpenCV中PCA实现人脸降维)
- OpenCV实现PCA算法出错!!help~!!!
- OpenCV实现PCA算法----输出异常
- cvCalcEigenDecomposite——opencv内置PCA算法
- OpenCV 中的PCA算法(cvCalcPCA)
- OpenCV PCA
- 用opencv实现的PCA算法,非API调用
- pca算法
- pca算法
- PCA算法
- PCA算法
- PCA算法
- PCA算法
- 1065. A+B and C (64bit) (20)-PAT甲级
- java的标识符、变量、常量、数据类型、数据类型转换、x进制
- 116.黑名单设置的优化(封装BaseAdapter的方法)
- 【Linux】VMware虚拟机使用winscp-以centos为例
- spring security 的logout功能
- opencv PCA算法
- 117.黑名单的优化,使用子线程加载数据,加载中显示加载圈
- 无法打开U盘中的虚拟机
- Python学习笔记(四)——高级特性
- mybatis执行批量更新batch update 的方法(oracle,mysql)
- Install Caffe on Ubuntu 14
- 无法正常安装Nessus
- 关于YUM
- php--面向对象--类的静态成员