OpenCV Nhan Dang Khuon Mat Cho Truoc

Preview:

Citation preview

[OpenCV] Nhận dạng khuôn mặt từ hình ảnh cho trướcWritten by Super User on 10 September 2012.

     Yêu cầu: Cho vào một bức ảnh và đầu ra là nhận dạng khuôn mặt.

 

?1234567891011121314151617181920212223242526272829303132333435

#include <cv.h>#include <highgui.h>int main(){    CvHaarClassifierCascade * pCascade = 0; //con trỏ nhận diện nằm giữ data trong file XML    CvMemStorage * pStorage = 0; // Khởi tạo bộ nhớ đệm    CvSeq * pFaceRectSeq;    int i;    // Khởi tạo    IplImage * pInpImg = cvLoadImage("010920121903.jpg",CV_LOAD_IMAGE_COLOR);    pStorage = cvCreateMemStorage(0);    pCascade = (CvHaarClassifierCascade *)cvLoad(("haarcascade_frontalface_alt.xml"),0,0,0);    if (!pInpImg || !pStorage || !pCascade )    {        printf("Khoi tao that bai: %s \n",            (!pInpImg)? "khong the load file hinh anh" :            (!pCascade)? "khong the load file xml -- "            "kiem tra dung duong dan":"sai duong dan");        exit(-1);    }   //Nhận dạng mắt trong ảnh    pFaceRectSeq = cvHaarDetectObjects(        pInpImg,        pCascade,        pStorage,        1.1,        3,        CV_HAAR_DO_CANNY_PRUNING,        cvSize(0,0));   // Tạo cửa sổ để hiển thị hình ảnh    cvNamedWindow("Nhan dien khuon mat",CV_WINDOW_AUTOSIZE);    //Vẽ hình chủ nhật xung quanh khuôn mặt    for (i=0;i<(pFaceRectSeq ? pFaceRectSeq->total:0);i++)    {        CvRect * r = (CvRect*)cvGetSeqElem(pFaceRectSeq,i);        CvPoint pt1 = {r->x,r->y};        CvPoint pt2 = {r->x + r->width,r->y + r->height};        cvRectangle(pInpImg,pt1,pt2,CV_RGB(255,0,0),3,4,0);    }

36373839404142434445464748

    //hiển thị nhận dạng    cvShowImage("Nhan dien khuon mat",pInpImg);    cvWaitKey(0);    cvDestroyAllWindows();  //Giải phóng bộ nhớ    cvReleaseImage(&pInpImg);    if (pCascade) cvReleaseHaarClassifierCascade(&pCascade);    if (pStorage) cvReleaseMemStorage(&pStorage);}