- 載入 model
(CvHaarClassifierCascade*)cvLoad("haarcascade_frontalface_alt.xml");
- 對來源影像作 down-scale
pyramidImg = cvCreateImage(cvSize(image->width/2,image->height/2), IPL_DEPTH_8U, 3); cvPyrDown(image, pyramidImg, CV_GAUSSIAN_5x5); scale = 2;
- 偵測人臉
CvMemStorage* storage = cvCreateMemStorage(0); CvSeq *faces; faces = cvHaarDetectObjects(pyramidImg, cascade, storage, 1.2, 2, CV_HAAR_DO_CANNY_PRUNING);
- 將找到的人臉框出來 (or 移除)
當偵測完畢,faces 會記錄人臉的位置,數量可能不只一個。在原先的範例,會針對每一個人臉的區域,再做偵測眼睛的動作,但我沒有這個需求,所以修改成- 找出最大的人臉區域:最大半徑。
- 將它移除:避免干擾到手。
程式碼下載
參考資料