前言

简单的人脸检测程序可以直接基于opencv的函数库进行实现,本文介绍一下detectMultiScale函数。

函数简介

opencv2人脸检测使用的是detectMultiScale函数,可以检测出图片中的所有人脸,并将vector类型保存各个人脸的位置和大小,用矩形Rect类表示,该函数由分类器的对象进行调用。

Haar特征分类器

Haar特征分类器就是一个XML文件,是opencv官方训练好的检测器,可以直接调用,存放在opencv的安装目录下。

.\opencv\sources\data\haarcascades

函数详解

不同版本的调用函数可能会有些微差别,可以查看函数的声明等。detectmultiscale函数可以得到每个人脸的得分。具体的声明如下。

    CV_WRAP virtual void detectMultiScale( const Mat& image,
                                   CV_OUT vector<Rect>& objects,
                                   double scaleFactor=1.1,
                                   int minNeighbors=3, int flags=0,
                                   Size minSize=Size(),
                                   Size maxSize=Size() );

    CV_WRAP virtual void detectMultiScale( const Mat& image,
                                   CV_OUT vector<Rect>& objects,
                                   vector<int>& rejectLevels,
                                   vector<double>& levelWeights,
                                   double scaleFactor=1.1,
                                   int minNeighbors=3, int flags=0,
                                   Size minSize=Size(),
                                   Size maxSize=Size(),
                                   bool outputRejectLevels=false );

rejectLevels:

levelWeights:

还有一个版本

void cv::CascadeClassifier::detectMultiScale( InputArray image,
                                      std::vector< Rect > &     objects,
                                      std::vector< int > &     numDetections,
                                      double     scaleFactor = 1.1,
                                      int     minNeighbors = 3,
                                      int     flags = 0,
                                      Size     minSize = Size(),
                                      Size     maxSize = Size() );    

 

参考

1.opencv官网

2.opencv例程

相关文章: