detectmultiscale函数参数含义_OpenCV人脸识别--detectMultiScale函数
首先上两张图。
现在要对上面两张图进行人脸识别。
一、Haar特征分类器介绍
Haar特征分类器就是一个XML文件,该文件中会描述人体各个部位的Haar特征值。包括人脸、眼睛、嘴唇等等。
Haar特征分类器存放目录:opencv安装目录中的\data\ haarcascades目录下,opencv2.4.8版本下的Haar特征分类器如下:
haarcascade_eye.xml
haarcascade_eye_tree_eyeglasses.xml
haarcascade_frontalface_alt.xml
haarcascade_frontalface_alt_tree.xml
haarcascade_frontalface_alt2.xml
haarcascade_frontalface_default.xml
haarcascade_fullbody.xml
haarcascade_lefteye_2splits.xml
haarcascade_lowerbody.xml
haarcascade_mcs_eyepair_big.xml
haarcascade_mcs_eyepair_small.xml
haarcascade_mcs_leftear.xml
haarcascade_mcs_lefteye.xml
haarcascade_mcs_mouth.xml
haarcascade_mcs_nose.xml
haarcascade_mcs_rightear.xml
haarcascade_mcs_righteye.xml
haarcascade_mcs_upperbody.xml
haarcascade_profileface.xml
haarcascade_righteye_2splits.xml
haarcascade_smile.xml
haarcascade_upperbody.xml
根据命名就可以很快知道各个分类器的用途。
其中:haarcascade_frontalface_alt.xml与haarcascade_frontalface_alt2.xml都是人脸识别的Haar特征分类器了。
二、detectMultiScale函数详解
cvHaarDetectObjects是opencv1中的函数,opencv2中人脸检测使用的是 detectMultiScale函数。它可以检测出图片中所有的人脸,并将人脸用vector保存各个人脸的坐标、大小(用矩形表示),函数由分类器对象调用:
void detectMultiScale(
const Mat& image,
CV_OUT vector& objects,
double scaleFactor = 1.1,
int minNeighbors = 3,
int flags = 0,
Size minSize = Size(),
Size maxSize = Size()
);
函数介绍:
参数1:image--待检测图片,一般为灰度图像加快检测速度;
参数2:objects--被检测物体的矩形框向量组;
参数3:scaleFactor--表示在前后两次相继的扫描中,搜索窗口的比例系数。默认为1.1即每次搜索窗口依次扩大10%;
参数4:minNeighbors--表示构成检测目标的相邻矩形的最小个数(默认为3个)。
如果组成检测目标的小矩形的个数和小于 min_neighbors - 1 都会被排除。
如果min_neighbors 为 0, 则函数不做任何操作就返回所有的被检候选矩形框,
这种设定值一般用在用户自定义对检测结果的组合程序上;
参数5:flags--要么使用默认值,要么使用CV_HAAR_DO_CANNY_PRUNING,如果设置为
CV_HAAR_DO_CANNY_PRUNING,那么函数将会使用Canny边缘检测来排除边缘过多或过少的区域,
因此这些区域通常不会是人脸所在区域;
参数6、7:minSize和maxSize用来限制得到的目标区域的范围。
三、示例代码
#include
#include
#include
#include
#include
using namespace std;
using namespace cv;
int main()
{
// 【1】加载分类器
CascadeClassifier cascade;
cascade.load("haarcascade_frontalface_alt2.xml");
Mat srcImage, grayImage,dstImage;
// 【2】读取图片
srcImage = imread("image.jpg");
dstImage = srcImage.clone();
imshow("【原图】", srcImage);
grayImage.create(srcImage.size(), srcImage.type());
cvtColor(srcImage, grayImage, CV_BGR2GRAY); // 生成灰度图,提高检测效率
// 定义7种颜色,用于标记人脸
Scalar colors[] =
{
// 红橙黄绿青蓝紫
CV_RGB(255, 0, 0),
CV_RGB(255, 97, 0),
CV_RGB(255, 255, 0),
CV_RGB(0, 255, 0),
CV_RGB(0, 255, 255),
CV_RGB(0, 0, 255),
CV_RGB(160, 32, 240)
};
// 【3】检测
vector rect;
cascade.detectMultiScale(grayImage, rect, 1.1, 3, 0); // 分类器对象调用
printf("检测到人脸个数:%d\n", rect.size());
// 【4】标记--在脸部画圆
for (int i = 0; i
{
Point center;
int radius;
center.x = cvRound((rect[i].x + rect[i].width * 0.5));
center.y = cvRound((rect[i].y + rect[i].height * 0.5));
radius = cvRound((rect[i].width + rect[i].height) * 0.25);
circle(dstImage, center, radius, colors[i % 7], 2);
}
// 【5】显示
imshow("【人脸识别detectMultiScale】", dstImage);
waitKey(0);
return 0;
}
效果图:
如果要识别人体的其它部位,只需将上面的haarcascade_frontalface_alt2.xml分类器替换即可。
detectmultiscale函数参数含义_OpenCV人脸识别--detectMultiScale函数相关推荐
- detectmultiscale函数参数含义_OpenCV detectMultiScale函数
对输入图片进行行人检测时由于图片的大小不一样,所以要用到多尺度检测.这里是用hog类的方法detectMultiScale. 函数原型: HOGDescriptor::detectMultiScale ...
- c语言中realloc函数参数含义,怎么正确用realloc函数
如何正确用realloc函数 #include #include int main() { char *q; char *p; q=(char*)malloc(sizeof(char)); print ...
- sklearn的train_test_split()各函数参数含义解释(非常全)
sklearn的train_test_split()各函数参数含义解释(非常全) sklearn的train_test_split()各函数参数含义解释(非常全) - The-Chosen-One - ...
- python函数参数学习_python学习笔记-11.函数参数和返回值进阶
1. 函数参数和返回值的作用 函数根据有没有参数以及有没有返回值,可以相互组合,共有4种形式: 无参数,无返回值 无参数,有返回值 有参数,无返回值 有参数,有返回值 定义函数时,是否接收参数,或者是 ...
- 用指针做函数参数自己编程实现字符串连接函数strcat()的功能。CQUPT题库
用指针做函数参数自己编程实现字符串连接函数strcat()的功能.CQUPT题库 下面程序中存在比较隐蔽的错误,请通过分析和调试程序,发现并改正程序中的错误. 注意:请将修改正确后的完整源程序拷贝粘贴 ...
- c 语言 模板函数参数,深入解析C++中的函数模板和函数的默认参数
C++函数模板 我们知道,数据或数值可以通过函数参数传递,在函数定义时它们是未知的,只有在发生函数调用时才能确定其值.这就是数据的参数化. 其实,数据类型也可以通过参数来传递,在函数定义是可以不指明具 ...
- c语言以数组作为函数参数,C语言将数组作为函数参数
一个函数的形参是普通的局部变量.当发生函数调用时,程序创建这些形参,然后用对应的实参来初始化这些形参.形参的作用域就是函数块.函数内可以改变形参的值,而不会影响调用上下文中实参的值. 如果需要将一个数 ...
- keras中的fit函数参数_keras的fit_generator与callback函数
fit_generator函数 fit_generator函数 callback类 每一个epoch结束(on_epoch_end)时,都要调用callback函数,callback函数(类)都要集成 ...
- python中round函数参数有负数_Python中round函数使用注意事项
使用round函数的时候发现了一个奇怪的现象.一直觉得round函数是一个用于四舍五入的函数,结果却不一定.一般如果觉得奇怪,那就是没弄懂其本质的运作原理,所以深入了解了下round函数. Pytho ...
最新文章
- java中对象输入流和输出流
- cwinthread*线程指针怎么销毁结束_C++知识点:智能指针
- Node.js摸石头系列目录
- ubuntu服务器系统不识别,U盘安装16.04server版 安装好后重启 无法进入系统
- 如何使用CineMatch的伪色指南功能来帮助评估图像
- HTML5 WebGame开源工具之impactjs
- fanuc系统屏蔽服务器,FANUC伺服轴的屏蔽方法
- HFSS - 同轴馈电矩形微带天线设计与仿真
- 商汤科技面试——实习面试案例总结
- Get rid of annoying security alerts in Microsoft Outlook!
- Linux配置Samba实现局域网共享文件夹
- 2023上海面料展览会
- 从总监到CEO的一些思考和理解
- CVE的提交与Github写入技巧
- python爬取高德地图_爬虫实战:如何爬取高德地图?
- 深度学习量化总结(PTQ、QAT)
- 【js特效】www.zhen.com图片频道页特效
- react加水印_React水印组件,支持图片水印,文字水印
- Generalizing to Unseen Domains: A Survey on Domain Generalization 论文分享
- 模型评估标准常用指标
热门文章
- 线段树 HDU 3397
- Java读取、创建Excel;验签,加密
- forward/redirect跳转页面的区别
- oracle 索引监控
- Glib2基本api调用流程(十五)
- Ubuntu18.04报错:system/tools/aidl/aidl_language_y.yy: error: define variable ‘api.pure‘ is not used
- 编译C++11/14方法
- wpf之lable右下角放关闭图标
- mac git命令行操作 git push pull 逻辑
- windows系统bat批处理 电脑换IP清空dns地址 清空缓存重新获取ip