OpenCV学习之利用级联的haar分类器寻找检测目标

来源:互联网 发布:C语言next_permutation 编辑:程序博客网 时间:2024/05/17 06:37

利用级联的haar分类器寻找检测目标

#include "cv.h"#include "highgui.h"  CvHaarClassifierCascade* load_object_detector(const char* cascade_path) {    return (CvHaarClassifierCascade*)cvLoad(cascade_path);}void detect_and_draw_objects(IplImage* image,CvHaarClassifierCascade* cascade,int do_pyramids) {    IplImage* small_image = image;    CvMemStorage* storage = cvCreateMemStorage(0);    CvSeq* faces;    int i, scale = 1;    // 如果操作方式flags被指定,向下测量输入图像以得到性能的提高      if (do_pyramids) {        small_image = cvCreateImage(cvSize(image->width / 2, image->height / 2),            IPL_DEPTH_8U, 3);        cvPyrDown(image, small_image, CV_GAUSSIAN_5x5);        scale = 2;    }    // 使用最快的变量      faces = cvHaarDetectObjects(small_image, cascade, storage, 1.2, 2,        CV_HAAR_DO_CANNY_PRUNING);    // 绘制所有矩形      for (i = 0; i < faces->total; i++) {        CvRect face_rect = *(CvRect*)cvGetSeqElem(faces, i);        cvRectangle(image, cvPoint(face_rect.x*scale, face_rect.y*scale),            cvPoint((face_rect.x + face_rect.width)*scale,            (face_rect.y + face_rect.height)*scale),            CV_RGB(255, 0, 0), 3);    }    if (small_image != image)        cvReleaseImage(&small_image);    cvReleaseMemStorage(&storage);}int main(int argc, char** argv) {    //摄像头    CvCapture *cap = cvCreateCameraCapture(0);//初始化相机捕获的指针      if (!cap)    {        system("pause");        exit(-1);    }    IplImage *image = cvQueryFrame(cap);    CvHaarClassifierCascade* cascade;    //新建窗口    cvNamedWindow("视频监控", CV_WINDOW_AUTOSIZE);    while ((image = cvQueryFrame(cap)) != NULL)    {        //IplImage* image = cvLoadImage("Lena.tif", 1);        //加载分类器        cascade = load_object_detector("haarcascade_frontalface_alt.xml");//人脸        //cascade = load_object_detector("haarcascade_eye_tree_eyeglasses.xml");//左眼        detect_and_draw_objects(image, cascade, 1);        //显示视频        cvShowImage("视频监控", image);        char c = cvWaitKey(10);        if (c == 27) break;    }    cvWaitKey(0);    cvReleaseHaarClassifierCascade(&cascade);    cvReleaseCapture(&cap);    cvReleaseImage(&image);    cvDestroyWindow("test");    return 0;}
阅读全文
0 0
原创粉丝点击