haarcascade.cpp
上传用户:banwdc
上传日期:2016-06-25
资源大小:2871k
文件大小:2k
源码类别:

OpenCV

开发平台:

Visual C++

  1. #include "cv.h"
  2. #include "highgui.h"
  3. CvHaarClassifierCascade* load_object_detector( const char* cascade_path )
  4. {
  5.     return (CvHaarClassifierCascade*)cvLoad( cascade_path );
  6. }
  7. void detect_and_draw_objects( IplImage* image,
  8.                               CvHaarClassifierCascade* cascade,
  9.                               int do_pyramids )
  10. {
  11.     IplImage* small_image = image;
  12.     CvMemStorage* storage = cvCreateMemStorage(0);
  13.     CvSeq* faces;
  14.     int i, scale = 1;
  15.     /* if the flag is specified, down-scale the 输入图像 to get a
  16.        performance boost w/o loosing quality (perhaps) */
  17.     if( do_pyramids )
  18.     {
  19.         small_image = cvCreateImage( cvSize(image->width/2,image->height/2), 
  20. IPL_DEPTH_8U, 3 );
  21.         cvPyrDown( image, small_image, CV_GAUSSIAN_5x5 );
  22.         scale = 2;
  23.     }
  24.     /* use the fastest variant */
  25. faces = cvHaarDetectObjects( small_image, cascade, storage, 1.2, 2,
  26.  CV_HAAR_DO_CANNY_PRUNING );
  27.     /* draw all the rectangles */
  28.     for( i = 0; i < faces->total; i++ )
  29.     {
  30.         /* extract the rectanlges only */
  31.         CvRect face_rect = *(CvRect*)cvGetSeqElem( faces, i );
  32.         cvRectangle( image, cvPoint(face_rect.x*scale,face_rect.y*scale),
  33.                      cvPoint((face_rect.x+face_rect.width)*scale,
  34.                              (face_rect.y+face_rect.height)*scale),
  35.                      CV_RGB(255,0,0), 3 );
  36.     }
  37.     if( small_image != image )
  38.         cvReleaseImage( &small_image );
  39.     cvReleaseMemStorage( &storage );
  40. }
  41. /* takes image filename and cascade path from the command line */
  42. int main( int argc, char** argv )
  43. {
  44.     IplImage* image;
  45.     if( argc==3 && (image = cvLoadImage( argv[1], 1 )) != 0 )
  46.     {
  47.         CvHaarClassifierCascade* cascade = load_object_detector(argv[2]);
  48.         detect_and_draw_objects( image, cascade, 1 );
  49.         cvNamedWindow( "test", 0 );
  50.         cvShowImage( "test", image );
  51.         cvWaitKey(0);
  52.         cvReleaseHaarClassifierCascade( &cascade );
  53.         cvReleaseImage( &image );
  54.     }
  55.     return 0;
  56. }