首页 > 代码库 > OpenCV——级联分类器(CascadeClassifier)

OpenCV——级联分类器(CascadeClassifier)

级联分类器的计算特征值的基础类FeatureEvaluator

功能:读操作read、复制clone、获得特征类型getFeatureType,分配图片分配窗口的操作setImage、setWindow,计算有序特征calcOrd,计算绝对特征calcCat,创建分类器特征的结构create函数。

目标级联矩形的分组函数groupRectangles

用load函数加载XML分类器文件具体步骤如下:                      {  PS:目前提供的分类器包括Haar分类器和LBP分类器(数据较少)}

    1.加载级联分类器

CascadeClassifier face_cascade;
face_cascade.load("haarcascade_frontalface_alt.xml");

    2.读取视频流

    3.对每一帧使用该分类器

先对图像进行预处理——变成灰度图,并将其直方图均衡化

若检测人脸,调用detectMultiScale函数,函数详情如下:

void detectMultiScale(
    const Mat& image,                //待检测灰度图像
    CV_OUT vector<Rect>& objects,    //被检测物体的矩形框向量
    double scaleFactor = 1.1,        //前后两次相继的扫描中搜索窗口的比例系数,默认为1.1 即每次搜索窗口扩大10%
    int minNeighbors = 3,            //构成检测目标的相邻矩形的最小个数 如果组成检测目标的小矩形的个数和小于minneighbors - 1 都会被排除
                                     //如果minneighbors为0 则函数不做任何操作就返回所有被检候选矩形框
    int flags = 0,                   //若设置为CV_HAAR_DO_CANNY_PRUNING 函数将会使用Canny边缘检测来排除边缘过多或过少的区域 
    Size minSize = Size(),              
    Size maxSize = Size()            //最后两个参数用来限制得到的目标区域的范围     
);

 PS:flags对于新的分类器没有用(但目前的haar分类器都是旧版的,CV_HAAR_DO_CANNY_PRUNING利用Canny边缘检测器来排除一些边缘很少或者很多的图像区域,CV_HAAR_SCALE_IMAGE就是按比例正常检测,CV_HAAR_FIND_BIGGEST_OBJECT只检测最大的物体,CV_HAAR_DO_ROUGH_SEARCH只做初略检测)

实例代码:

face_cascade.detectMultiScale( frame_gray, faces, 1.1, 2, 0|CV_HAAR_SCALE_IMAGE, Size(30, 30) );

 

OpenCV——级联分类器(CascadeClassifier)