注:ios
從外設攝像裝置中獲取圖像幀,把每幀的圖片與人臉特徵進行匹配,用方框框住識別出來的人臉ide
須要用到的函數:函數
CvHaarClassifierCascade* cvLoadHaarClassifierCascade( const char* directory, CvSize orig_window_size );ui
第一個參數:訓練好的級聯分類器的路徑spa
第二個參數:級聯分類器訓練中採用的檢測目標的尺寸code
#include "stdafx.h" #include "iostream" using namespace std; #include "opencv2/opencv.hpp" #include "cv.h" #include "highgui.h" #include "cxcore.h" #include "Windows.h" void main() { IplImage *pFrame = NULL; IplImage *pGrayImg = NULL; //加載Haar特徵檢測分類器 const char *pCascadeFileName = "E:/C_VC_code/opencv/haarcascade_frontalface_alt2.xml"; //CvHaarClassifierCascade *pHaarCascade = (CvHaarClassifierCascade*)cvLoad(pCascadeFileName); CvHaarClassifierCascade *pHaarCascade = cvLoadHaarClassifierCascade(pCascadeFileName,cvSize(200,200)); CvCapture *pCapture = cvCreateCameraCapture(0); //獲取攝像頭 cout<< "加載成功..." <<endl; int nFrmNum = 0; if(!pCapture) { cout<<"加載失敗..."<<endl; return ; } //create window cvNamedWindow("Video",1); CvMemStorage *pcvMStorage; CvSeq *pCvSeq; while(pFrame = cvQueryFrame(pCapture)) //逐幀讀取 { pGrayImg = cvCreateImage(cvGetSize(pFrame), IPL_DEPTH_8U, 1); cvCvtColor(pFrame, pGrayImg, CV_BGR2GRAY); //---------------人臉識別------------------------- if (pHaarCascade != NULL) { pcvMStorage = cvCreateMemStorage(0); cvClearMemStorage(pcvMStorage); // 識別 pCvSeq = cvHaarDetectObjects(pGrayImg, pHaarCascade, pcvMStorage); // 標記 for(int i = 0; i <pCvSeq->total; i++) { CvRect* r = (CvRect*)cvGetSeqElem(pCvSeq, i); CvPoint pt[4]; pt[0] = cvPoint(r->x,r->y); pt[1] = cvPoint(r->x+r->width,r->y); pt[2] = cvPoint(r->x+r->width,r->y+r->height); pt[3] = cvPoint(r->x,r->y+r->height); CvPoint* ppt=pt; int count=4; cvPolyLine( pFrame, &ppt,&count,1,1,CV_RGB(10,240,33),2);//畫矩形 } cvReleaseMemStorage(&pcvMStorage); } cvShowImage("Video",pFrame); //---------------人臉識別------------------------- char c = cvWaitKey(33); //按esc退出 if(c==27) { cvDestroyWindow("Video"); cvReleaseImage(&pFrame); cvReleaseImage(&pGrayImg); return; } } }