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

函数

void cv::CascadeClassifier::detectMultiScale
(
	InputArray 	image,
    std::vector< Rect > & 	objects,
    double 	scaleFactor = 1.1,
    int 	minNeighbors = 3,
    int 	flags = 0,
    Size 	minSize = Size(),
    Size 	maxSize = Size() 
)
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 最大对象尺寸(大于该值的对象将被忽略)

测试代码

#include "widget.h"
#include "ui_widget.h"

#include 
#include 
#include 
#include 

using namespace cv;
using namespace std;

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    //创建级联分类器
    CascadeClassifier cascade;
    //载入Haar特征分类器
    cascade.load("C:/opencv/date/haarcascade_frontalface_alt2.xml");

    //创建矩阵
    Mat src,
        dst_gray;
    //载入图像
    src = imread("c:/opencv/zhou.jpg");
    //生成灰度图
    cvtColor(src, dst_gray, COLOR_BGR2GRAY);

    //创建矩形容器
    vector rects;
    //识别人脸
    cascade.detectMultiScale(dst_gray,rects,1.1,3,0);

    //绘制矩形框
    Scalar color(0,255,0);

    for(uint i=0;i

测试结果

Qt-OpenCV学习笔记--人脸识别--基于Haar特征的cascade分类器_第1张图片

参考:

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

使用Haar Cascade 进行人脸识别

你可能感兴趣的:(opencv,学习,qt)