• 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) );
  • 相关阅读:
    barabasilab-networkScience学习笔记2-图理论
    barabasilab-networkScience学习笔记1-网络科学简介
    windows下R语言在终端的运行
    远程打印服务器
    矩震级Mw与地震矩M0的换算关系
    关于地震科学台阵数据中心的仪器记录值介绍
    capjoint中的tel3核心代码teleseis3.f90
    Centos7安装
    matlab中hold on 和hold off功能的区别
    sac cut
  • 原文地址:https://www.cnblogs.com/farewell-farewell/p/5945412.html
Copyright © 2020-2023  润新知