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

<span style="font-size:14px;">#include <opencv\cv.h>#include <opencv\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 ){IplImage* image;if( argc==3 && (image = cvLoadImage( argv[1], 1 )) != 0 ){CvHaarClassifierCascade* cascade = load_object_detector(argv[2]);detect_and_draw_objects( image, cascade, 1 );cvNamedWindow( "test", 0 );cvShowImage( "test", image );cvWaitKey(0);cvReleaseHaarClassifierCascade( &cascade );cvReleaseImage( &image );}return 0;}</span>

运行结果截图:

,鸟的翅膀在空气里振动,那是一种喧嚣而凛裂的,

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

相关文章:

你感兴趣的文章:

标签云: