`
kanwoerzi
  • 浏览: 1648945 次
文章分类
社区版块
存档分类
最新评论

cvHaarDetectObjects

 
阅读更多

cvHaarDetectObjects
检测图像中的目标

typedef struct CvAvgComp { CvRect rect; int neighbors; } CvAvgComp; CvSeq* cvHaarDetectObjects( const CvArr* image, CvHaarClassifierCascade* cascade, CvMemStorage* storage, double scale_factor=1.1, int min_neighbors=3, int flags=0, CvSize min_size=cvSize(0,0) );
image
被检图像
cascade
harr 分类器级联的内部标识形式
storage 用来存储检测到的一序列候选目标矩形框的内存区域。
scale_factor
在前后两次相继的扫描中,搜索窗口的比例系数。例如1.1指将搜索窗口依次扩大10%。
min_neighbors
构成检测目标的相邻矩形的最小个数(缺省-1)。如果组成检测目标的小矩形的个数和小于min_neighbors-1 都会被排除。如果min_neighbors 为 0, 则函数不做任何操作就返回所有的被检候选矩形框,这种设定值一般用在用户自定义对检测结果的组合程序上。
flags
操作方式。当前唯一可以定义的操作方式是 CV_HAAR_DO_CANNY_PRUNING。如果被设定,函数利用Canny边缘检测器来排除一些边缘很少或者很多的图像区域,因为这样的区域一般不含被检目标。人脸检测中通过设定阈值使用了这种方法,并因此提高了检测速度。
min_size
检测窗口的最小尺寸。缺省的情况下被设为分类器训练时采用的样本尺寸(人脸检测中缺省大小是~20×20)。
函数 cvHaarDetectObjects 使用针对某目标物体训练的级联分类器在图像中找到包含目标物体的矩形区域,并且将这些区域作为一序列的矩形框返回。函数以不同比例大小的扫描窗口对图像进行几次搜索(察看cvSetImagesForHaarClassifierCascade)。每次都要对图像中的这些重叠区域利用cvRunHaarClassifierCascade进行检测。有时候也会利用某些继承(heuristics)技术以减少分析的候选区域,例如利用 Canny 裁减(prunning)方法。函数在处理和收集到候选的方框(全部通过级联分类器各层的区域)之后,接着对这些区域进行组合并且返回一系列各个足够大的组合中的平均矩形。调节程序中的缺省参数(scale_factor=1.1, min_neighbors=3, flags=0)用于对目标进行更精确同时也是耗时较长的进一步检测。为了能对视频图像进行更快的实时检测,参数设置通常是:scale_factor=1.2, min_neighbors=2, flags=CV_HAAR_DO_CANNY_PRUNING, min_size=<minimum possible face size> (例如, 对于视频会议的图像区域).

例子:利用级联的Haar classifiers寻找检测目标(e.g. faces).

#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; 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, 0 ); 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; }

分享到:
评论

相关推荐

    opencv人脸识别--cvHaarDetectObjects函数_源码

    opencv人脸识别--cvHaarDetectObjects函数

    opencv人脸识别--cvHaarDetectObjects函数

    opencv人脸识别--cvHaarDetectObjects函数

    人工智能 产生式系统 动物识别 cpp文件

    非常好的动物识别 运用了产生式规则 里面是完整的代码

    haarcascade_frontalface_alt2.xml

    人脸的Haar特征分类器就是一个XML文件,该文件中会描述人脸...关于人脸的Haar特征分类器,可以直接使用cvHaarDetectObjects。离线的人脸检测技术一般采用神经网络的方法,ColorReco就是用神经网络的思路做人脸识别的。

    opencv_python-3.3.1-cp36-none-win_amd64.whl

    人脸的Haar特征分类器就是一个XML文件,该文件中会描述人脸...关于人脸的Haar特征分类器,可以直接使用cvHaarDetectObjects。离线的人脸检测技术一般采用神经网络的方法,ColorReco就是用神经网络的思路做人脸识别的。

    opencv haar分类器内存静态加载

    opencv使用cvHaarDetectObjects的时候需要用到haar分类器,而此前我们都需要从文件face.xml中载入,为了开发测试等工作的方便,特地研究了下CvHaarClassifierCascade的结构,然后实现了静态化分类器,将face.xml融合...

    人脸识别素有的训练模型

    CvSeq *eyes = cvHaarDetectObjects( img, cascade_e, storage1, 1.1, 3, 0, cvSize(4, 5) ); int i; for( i = 0; i (eyes ? eyes-&gt;total : 0); i++ ) { CvRect *eye = (CvRect*)...

    基于Opencv的视频人脸检测程序源代码(可运行)

    faces = cvHaarDetectObjects( img, cascade, storage,1.1, 2, CV_HAAR_DO_CANNY_PRUNING, cvSize(20, 20) ); for( int i = 0; i (faces ? faces-&gt;total : 0); i++ ) { CvRect* r = (CvRect*)cvGetSeqElem( ...

    javacv-platform-1.3.3-src

    视频人脸识别,取代jmf。。。 Introduction JavaCV uses wrappers from the JavaCPP Presets of commonly used libraries by researchers in the field of computer vision (OpenCV, FFmpeg, libdc1394, PGR ...

    基于ViolaJones算法的人脸识别CPP文件

    ViolaJones是人脸识别中效率最高的,在OpenCV中对应的库文件为cvHaarDetectObjects, 本文件为自己写的识别代码,调用该库函数 配置好OpenCV之后可以使用

    基于MFC的人脸检测程序(使用OpenCV实现)

    程序使用OpenCV里面自带的Haar特征分类器实现人脸的检测。...程序是通过MFC建的对话框程序,首先通过CFileDialog载入图片然后再用cvHaarDetectObjects函数进行人脸的探测。而后在图片中把人脸用矩形标记并显示出来。

    opencv人脸检测源码

    使用的opencv里面的cvHaarDetectObjects函数完成的人脸识别,里面有完整的工程,在vs2010和opencv2.4.9下可以正常运行,里面包括我训练的xml文件和测试用的两个视频,如果你们你们换了其他视频效果不佳,需要自己...

Global site tag (gtag.js) - Google Analytics