【opencv基础】detectMultiScale函数详解及分类器置信度
前言
简单的人脸检测程序可以直接基于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() );
示例
faces = det.detectMultiScale3(img, 1.3, 3, 0, minSize=(100,100), maxSize=(200, 200), outputRejectLevels=True) rects = faces[0] # face bbox neighbours = faces[1] # level weights = faces[2] # score
# For each resulting detection,
levelWeights
will then contain the certainty of classification at the final stage. This value can then be used to separate strong from weaker classifications.置信度的数值范围可能大于1,DMS单人脸检测时可以取置信度最高的那个bbox作为人脸区域;竟然还有负值???
置信度1.5以上,姿态角相对较小,小于1.5的一般姿态角太大,landmarks的可信度较低;
参考
1.opencv官网;
2.opencv例程;
完
各美其美,美美与共,不和他人作比较,不对他人有期待,不批判他人,不钻牛角尖。
心正意诚,做自己该做的事情,做自己喜欢做的事情,安静做一枚有思想的技术媛。
版权声明,转载请注明出处:https://www.cnblogs.com/happyamyhope/
心正意诚,做自己该做的事情,做自己喜欢做的事情,安静做一枚有思想的技术媛。
版权声明,转载请注明出处:https://www.cnblogs.com/happyamyhope/