• Qt-OpenCV学习笔记--人脸识别--基于Haar特征的cascade分类器


    概述

    基于Haar特征的cascade分类器(classifiers) 是Paul Viola和 Michael Jone在2001年,论文”Rapid Object Detection using a Boosted Cascade of Simple Features”中提出的一种有效的物品检测(object detect)方法。它是一种机器学习方法,通过许多正负样例中训练得到cascade方程,然后将其应用于其他图片。

    Haar特征分类器就是一个XML文件,该文件中会描述人体各个部位的Haar特征值。

    OpenCV自带一些已经训练好的分类器,比如人脸、眼睛、微笑等。这些文件储存在如下路径中:

    opencv/data/haarcascades/

    如果想要自己训练分类器,来识别任意物品,可以参照:

    Cascade Classifier Training

    函数

    1. void cv::CascadeClassifier::detectMultiScale
    2. (
    3. InputArray image,
    4. std::vector< Rect > & objects,
    5. double scaleFactor = 1.1,
    6. int minNeighbors = 3,
    7. int flags = 0,
    8. Size minSize = Size(),
    9. Size maxSize = Size()
    10. )
    image输入图像(CV_8U)
    objects输出结果(包含人脸位置的矩形集合)
    scaleFactor每次图像缩小的比例(默认1.1)
    minNeighbors成功匹配所需要的矩形框的数量(默认为3)
    flags

    默认为0

     ● CASCADE_DO_CANNY_PRUNING=1

        利用canny边缘检测来排除一些边缘很少或者很多的图像区域
     ● CASCADE_SCALE_IMAGE=2    正常比例检测
     ● CASCADE_FIND_BIGGEST_OBJECT=4    只检测最大的物体
     ● CASCADE_DO_ROUGH_SEARCH=8    初略的检测

    minSize最小对象尺寸(小于该值的对象将被忽略)
    maxSize最大对象尺寸(大于该值的对象将被忽略)

    测试代码

    1. #include "widget.h"
    2. #include "ui_widget.h"
    3. #include <opencv2/core/core.hpp>
    4. #include <opencv2/highgui/highgui.hpp>
    5. #include <opencv2/imgproc/imgproc.hpp>
    6. #include <opencv2/opencv.hpp>
    7. using namespace cv;
    8. using namespace std;
    9. Widget::Widget(QWidget *parent)
    10. : QWidget(parent)
    11. , ui(new Ui::Widget)
    12. {
    13. ui->setupUi(this);
    14. //创建级联分类器
    15. CascadeClassifier cascade;
    16. //载入Haar特征分类器
    17. cascade.load("C:/opencv/date/haarcascade_frontalface_alt2.xml");
    18. //创建矩阵
    19. Mat src,
    20. dst_gray;
    21. //载入图像
    22. src = imread("c:/opencv/zhou.jpg");
    23. //生成灰度图
    24. cvtColor(src, dst_gray, COLOR_BGR2GRAY);
    25. //创建矩形容器
    26. vector<Rect> rects;
    27. //识别人脸
    28. cascade.detectMultiScale(dst_gray,rects,1.1,3,0);
    29. //绘制矩形框
    30. Scalar color(0,255,0);
    31. for(uint i=0;i<rects.size();i++)
    32. {
    33. rectangle(src,rects[i],color,2,8);
    34. }
    35. //显示
    36. imshow("src",src);
    37. }
    38. Widget::~Widget()
    39. {
    40. delete ui;
    41. }

    测试结果

    参考:

    opencv人脸检测_Haar特征分类器实现人脸检测_cascade.detectMultiScale参数详解

    使用Haar Cascade 进行人脸识别

  • 相关阅读:
    pcie reset系列之 内核框架
    android dex 优化
    Apple pencil跟电容笔有什么区别?ipad电容笔性价比高品牌推荐
    朝夕光年「红砖」搭建平台架构设计和应用落地
    Gin-swaggo为gin框架提供Swagger 文档
    Java的CAS操作
    mirror算法 O(1)空间复杂度实现二叉树遍历
    rsm包设计响应面试验并做数据分析
    sql语句 如果为空值显示为0
    Vue项目优化方案
  • 原文地址:https://blog.csdn.net/ssismm/article/details/128003091