pca svm识别人脸
来源:互联网 发布:人流量 检测 知乎 编辑:程序博客网 时间:2024/06/09 22:31
void SVMTRAINCLASS::OnBnClickedButtonsvmtrain(){// TODO: Add your control notification handler code herechar filename[100]; static CvSVM svm ; static int isflag=0;vector<Mat> images; //This variable will be loaded with a set of images to perform PCA on. int nEigens; vector<FILELABEL> faceBank; vector<CString> nonFaceBank; int num = 0; Mat src; //vector<FILELABEL> faceBank; //vector<CString> nonFaceBank; CString pospath,negpath; GetDlgItemText(IDC_EDITSAMPLEFILE,pospath); GetDlgItemText(IDC_EDITSAMPLEFILE2,negpath); if(strlen(pospath)==0||strlen(negpath)==0)return; GetSubDirFiles(pospath,faceBank,0); GetDirFiles(negpath,nonFaceBank); int div =0; div=GetDlgItemInt(IDC_COMBOTEZHENGFANGFA); int imageFaceNum = faceBank.size()/div; int imageNonFaceNum = nonFaceBank.size()/div; Mat values(imageFaceNum+imageNonFaceNum, 1, CV_32SC1); //Values are the corresponding values to each of my images. print("load face"); int r=GetDlgItemInt(IDC_EDIT6); int w=GetDlgItemInt(IDC_EDIT7); for(int i=1; i<=imageFaceNum; i++) { //sprintf(filename,"C:/img/face/MIT/MIT/faces/%d.bmp",i); values.at<int>(i-1,0) = faceBank[i-1].label; src=cvLoadImage(faceBank[i-1].name,0); resize(src,src,Size(r,w)); images.push_back(src); num++; } print("load unface"); for(int i=1; i<=imageNonFaceNum; i++) { //sprintf(filename,"C:/img/face/MIT/MIT/nonfaces/%d.bmp",i); values.at<int>(imageFaceNum+i-1,0) = -1; src=cvLoadImage(nonFaceBank[i-1],0); resize(src,src,Size(r,w)); images.push_back(src); num++; } nEigens = images.size() - 1; //Number of Eigen Vectors. //Load the images into a Matrix Mat desc_mat(images.size(), images[0].rows * images[0].cols, CV_8UC1); print("merge mat"); for (int i=0; i<images.size(); i++) { desc_mat.row(i) = images[i].reshape(1, 1) + 0; } Mat average; static PCA pca(desc_mat, average, CV_PCA_DATA_AS_ROW, nEigens); Mat data(desc_mat.rows, nEigens, CV_32FC1); //This Mat will contain all the Eigenfaces that will be used later with SVM for detection //Project the images onto the PCA subspace if(isflag==0){ print("do pca"); for(int i=0; i<images.size(); i++) { Mat projectedMat(1, nEigens, CV_32FC1); pca.project(desc_mat.row(i), projectedMat); normalize(projectedMat,projectedMat,1.0); data.row(i) = projectedMat.row(0) + 0; } } CvMat d1 = (CvMat)data; CvMat d2 = (CvMat)values; if(isflag==0){ CvSVMParams param; CvTermCriteria criteria; criteria = cvTermCriteria( CV_TERMCRIT_EPS, 1000, FLT_EPSILON ); param = CvSVMParams( CvSVM::C_SVC, CvSVM::RBF, 10.0, 0.09, 1.0, 10.0, 0.5, 1.0, NULL, criteria ); //☆☆☆☆☆☆☆☆☆(5)SVM学习☆☆☆☆☆☆☆☆☆☆☆☆ print("begin train...."); svm.train( &d1, &d2, NULL, NULL, param ); print("done"); isflag=1;} Mat cs; // Mat cs1(1,400,CV_32FC1); CString chessimg; GetDlgItemText(IDC_EDITPREDICTFILE,chessimg); src=cvLoadImage(chessimg,0); Mat src0=cvLoadImage(faceBank[0].name,0); cv::resize(src,src,Size(images[0].rows,images[0].cols)); cs = src.reshape(1, 1) + 0; Mat projectedMat(1, nEigens, CV_32FC1); pca.project(cs, projectedMat); Mat mat=projectedMat+0; //CvMat d3 = (CvMat)projectedMat; normalize(projectedMat,projectedMat,1.0); int ret = svm.predict(projectedMat); print("%d",ret); //for(int i=0; i<imageFaceNum; i++) { // //sprintf(filename,"C:/img/face/MIT/MIT/faces/%d.bmp",i); // src=cvLoadImage(faceBank[i],0); // cs = src.reshape(1, 1) + 0; // Mat projectedMat(1, nEigens, CV_32FC1); // pca.project(cs, projectedMat); // Mat mat=projectedMat+0; // //CvMat d3 = (CvMat)projectedMat; // normalize(projectedMat,projectedMat,1.0); // int ret = svm.predict(projectedMat); // print("%d",ret); //} }
0 0
- PCA + SVM 人脸识别
- pca svm识别人脸
- PCA+SVM人脸识别
- opencv 中SVM + PCA 人脸识别
- opencv 中SVM + PCA 人脸识别
- Matlab PCA+SVM人脸识别(一)
- Matlab PCA+SVM人脸识别(一)
- 人脸识别中的PCA-SVM和BOW-SVM
- (11)MATLAB PCA+SVM 人脸识别
- 基于PCA和SVM的人脸识别
- 基于PCA和SVM的人脸识别系统
- 基于PCA和SVM的人脸识别
- PCA+svm人脸识别算法错误修改
- 基于PCA和SVM的人脸识别
- 基于PCA和SVM的人脸识别之一.基本知识
- 基于PCA和SVM的人脸识别系统
- PCA人脸识别
- PCA、人脸识别
- 中科院NLPIR中文分词java版
- Hard 138题 Copy List with Random Pointer
- 安装完ubuntu 16.10要做的事情
- 安装配置Vim中文帮助文档
- OPENGL学习笔记(五)
- pca svm识别人脸
- OPENGL学习笔记(六)
- 谷歌中国算法比赛解题报告 APAC2016B
- bluehost服务器使用阿里万网购买的域名
- OPENGL视频学习(七)
- 在Linux中的常用命令
- 谷歌中国算法比赛解题报告 APAC2016C
- 程序员的学习经验
- Blocking Queue