opencv 正脸和侧脸检测
算法參考三篇論文:
最早的Haar特征由Papageorgiou C.等提出(《A general framework for object detection》),后來Paul Viola和Michal Jones提出利用積分圖像法快速計算Haar特征的方法(《Rapid object detection using a boosted cascade of simple features》)。之后,Rainer Lienhart 和 Jochen Maydt用對角特征對Haar特征庫進行了擴展(《An extended set of Haar-like features for rapid object detection》)。OpenCV的Haar分類器就是基于擴展后的特征庫實現(xiàn)的。
?
int main(){const char *pstrImageName = "test.jpg";IplImage *pSrcImage = cvLoadImage(pstrImageName, 0);if(!pSrcImage){cout << pstrImageName << "can't load " << endl;return -1;}// 加載Haar特征檢測分類器// haarcascade_frontalface_alt.xml系OpenCV自帶的分類器 const char *pstrCascadeFileName = "D:/Program Files/OpenCv244/opencv/data/haarcascades/haarcascade_frontalface_alt.xml";CvHaarClassifierCascade *pHaarCascade = NULL;pHaarCascade = (CvHaarClassifierCascade*)cvLoad(pstrCascadeFileName);// 人臉識別與標記if (pHaarCascade != NULL){ CvMemStorage *pcvMStorage = cvCreateMemStorage(0);CvSeq *pcvSeqFaces = cvHaarDetectObjects(pSrcImage, pHaarCascade, pcvMStorage);// 標記for(int i = 0; i <pcvSeqFaces->total; i++){CvRect* r = (CvRect*)cvGetSeqElem(pcvSeqFaces, i); CvPoint center;int radius;center.x = cvRound((r->x + r->width * 0.5));center.y = cvRound((r->y + r->height * 0.5));radius = cvRound((r->width + r->height) * 0.25);cvCircle(pSrcImage, center, radius, cvScalar(255));}cvReleaseMemStorage(&pcvMStorage);}cvNamedWindow("face detection", CV_WINDOW_AUTOSIZE);cvShowImage("face detection", pSrcImage);cvWaitKey(0);cvDestroyAllWindows();cvReleaseImage(&pSrcImage); }Opencv 2.4.3以后添加了側臉檢測,要想檢測側臉只需將加載的文件改為haarcascade_profileface.xml,這個只是識別圖形上朝一邊的臉,如果想要識別朝另一邊的臉就需要對圖片進行水平翻轉,再進行檢測。
opencv中實現(xiàn)圖片的翻轉用
Flip:垂直,水平或即垂直又水平翻轉二維數(shù)組
void?cvFlip(?const?CvArr*?src,?CvArr*?dst=NULL,?int?flip_mode=0);?
flip_mode=-1(x、y)??0(x)??1(y)
???????0??//??垂直鏡像??? ?1?//??水平鏡像? ?-1 //兩軸的翻轉
?
總結
以上是生活随笔為你收集整理的opencv 正脸和侧脸检测的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 图像LBP特征
- 下一篇: opencv的K近邻算法