一.人脸的Haar特征分类器是什么

人脸的Haar特征分类器就是一个XML文件,该文件中会描述人脸的Haar特征值。当然Haar特征的用途可不止可以用来描述人脸这一种,用来描述眼睛,嘴唇或是其它物体也是可以的。

二.在哪找人脸的Haar特征分类器

OpenCV有已经自带了人脸的Haar特征分类器。OpenCV安装目录中的\data\ haarcascades目录下的haarcascade_frontalface_alt.xml与haarcascade_frontalface_alt2.xml都是用来检测人脸的Haar分类器。这个haarcascades目录下还有人的全身,眼睛,嘴唇的Haar分类器。读者可以仿照本方的例子来试验下效果看看。

三.怎么用人脸的Haar特征分类器

使用人脸的Haar特征分类器非常之简单,直接使用cvHaarDetectObjects。下面来看看这个函数的介绍:

函数功能:检测图像中的目录

函数原型:

CVAPI(CvSeq*) cvHaarDetectObjects(

const CvArr* image,

CvHaarClassifierCascade* cascade,

CvMemStorage* storage,

double scale_factor CV_DEFAULT(1.1),

int min_neighbors CV_DEFAULT(3),

int flags CV_DEFAULT(0),

CvSize min_size CV_DEFAULT(cvSize(0,0)),

CvSize max_size CV_DEFAULT(cvSize(0,0))

);

函数说明:

第一个参数表示输入图像,尽量使用灰度图以加快检测速度。

第二个参数表示Haar特征分类器,可以用cvLoad()函数来从磁盘中加载xml文件作为Haar特征分类器。

第三个参数为CvMemStorage类型,大家应该很熟悉这个CvMemStorage类型了,《OpenCV入门指南》中很多文章都介绍过了。

第四个参数表示在前后两次相继的扫描中,搜索窗口的比例系数。默认为1.1即每次搜索窗口依次扩大10%

第五个参数表示构成检测目标的相邻矩形的最小个数(默认为3个)。如果组成检测目标的小矩形的个数和小于 min_neighbors - 1 都会被排除。如果min_neighbors 为 0, 则函数不做任何操作就返回所有的被检候选矩形框,这种设定值一般用在用户自定义对检测结果的组合程序上。

第六个参数要么使用默认值,要么使用CV_HAAR_DO_CANNY_PRUNING,如果设置为CV_HAAR_DO_CANNY_PRUNING,那么函数将会使用Canny边缘检测来排除边缘过多或过少的区域,因此这些区域通常不会是人脸所在区域。

第七个,第八个参数表示检测窗口的最小值和最大值,一般设置为默认即可。

函数返回值:

函数将返回CvSeq对象,该对象包含一系列CvRect表示检测到的人脸矩形。

四.人脸检测示例代码

// 基于Haar分类器的OpenCV人脸检测实例
#include <opencv2/opencv.hpp>
#include <cstdio>
#include <cstdlib>
#include <Windows.h>
using namespace std;
int main()
{// 加载Haar特征检测分类器  // haarcascade_frontalface_alt.xml是OpenCV自带的分类器 CvHaarClassifierCascade *pHaarCascade;const char *pstrCascadeFileName = "F:\\Software\\opencv\\sources\\data\\haarcascades\\haarcascade_frontalface_alt.xml";pHaarCascade = (CvHaarClassifierCascade*)cvLoad(pstrCascadeFileName);// 加载图像  const char *pstrImageName = "J:\\faceImage\\318753-130PZZ44879.jpg";IplImage *pSrcImage = cvLoadImage(pstrImageName, CV_LOAD_IMAGE_UNCHANGED);// 转为灰度图像IplImage *pGrayImage = cvCreateImage(cvGetSize(pSrcImage), IPL_DEPTH_8U, 1);cvCvtColor(pSrcImage, pGrayImage, CV_BGR2GRAY);// 人脸检测与标记  if (pHaarCascade != NULL){CvScalar FaceCirclecolors[] ={{ { 0, 0, 255 } },{ { 0, 128, 255 } },{ { 0, 255, 255 } },{ { 0, 255, 0 } },{ { 255, 128, 0 } },{ { 255, 255, 0 } },{ { 255, 0, 0 } },{ { 255, 0, 255 } }};CvMemStorage *pcvMStorage = cvCreateMemStorage(0);cvClearMemStorage(pcvMStorage);// 识别  DWORD dwTimeBegin, dwTimeEnd;dwTimeBegin = GetTickCount();//返回CvSeq对象,该对象包含一系列CvRect表示检测到的人脸矩形CvSeq *pcvSeqFaces = cvHaarDetectObjects(pGrayImage, pHaarCascade, pcvMStorage);dwTimeEnd = GetTickCount();printf("人脸个数: %d   识别用时: %d ms\n", pcvSeqFaces->total, dwTimeEnd - dwTimeBegin);// 标记  for (int i = 0; i <pcvSeqFaces->total; i++){CvRect* r = (CvRect*)cvGetSeqElem(pcvSeqFaces, i);CvPoint center;int radius;center.x = cvRound((r->x + r->width * 0.5));center.y = cvRound((r->y + r->height * 0.5));radius = cvRound((r->width + r->height) * 0.25);cvCircle(pSrcImage, center, radius, FaceCirclecolors[i % 8], 2);}cvReleaseMemStorage(&pcvMStorage);}const char *pstrWindowsTitle = "人脸识别";cvNamedWindow(pstrWindowsTitle, CV_WINDOW_AUTOSIZE);cvShowImage(pstrWindowsTitle, pSrcImage);cvWaitKey(0);cvDestroyWindow(pstrWindowsTitle);cvReleaseImage(&pSrcImage);cvReleaseImage(&pGrayImage);return 0;
}

五.人脸检测程序运行结果

本文主要转载自:http://blog.csdn.net/MoreWindows/article/details/8426318

基于Haar分类器的OpenCV人脸检测实例相关推荐

  1. 基于Python下的OpenCv人脸检测

    基于Python下的OpenCv人脸识别模拟 1.Pycharm下OpenCv的安装 2.人脸识别的原理 目标实现 基本原理 3.代码实现: 实现步骤 参考示意图: 1.Pycharm下OpenCv的 ...

  2. OpenFace库(Tadas Baltrusaitis)中基于Haar Cascade Classifiers进行人脸检测的测试代码

    Tadas Baltrusaitis的OpenFace是一个开源的面部行为分析工具,它的源码可以从 https://github.com/TadasBaltrusaitis/OpenFace 下载.O ...

  3. 【图像识别】基于 Haar分类器实现五官定位matlab源码含 GUI

    一.简介 1 Haar分类器的前世今生 人脸检测属于计算机视觉的范畴,早期人们的主要研究方向是人脸识别,即根据人脸来识别人物的身份,后来在复杂背景下的人脸检测需求越来越大,人脸检测也逐渐作为一个单独的 ...

  4. .NetCore——基于OpenCV人脸检测

    .NetCore--基于OpenCV人脸检测 一.介绍 在.NetCore中,基于OpenCV实现对静态图片的人脸识别,检测人脸是否存在,且存在的数量.注: 不能自动学习人脸特征. 二.使用 首先引入 ...

  5. 使用 OpenCV与 HAAR 级联算法进行人脸检测和人脸识别

    AI人脸识别是一种从数字图像或视频帧中识别或验证人脸的技术.人类可以毫不费力地快速识别面部.这对我们来说是一项轻松的任务,但对计算机来说却是一项艰巨的任务.因为存在各种复杂性,例如低分辨率.遮挡.光照 ...

  6. 【图像识别】基于Haar分类器实现五官定位matlab代码

    1 简介 人脸检测是人脸分析的首要环节,其处理的问题是确认图像中是否存在人脸,如果存在则对人脸进行定位.人脸检测的应用领域相当广泛,是实现机器智能化的重要步骤之一.AdaBoost算法是1995年提出 ...

  7. opencv人脸检测总结

    主要参考了很多大神的总结,做了自己的整理,还没有完成,,后续不断完善补充 opencv人脸检测总结 一.人脸检测介绍 1. 人脸检测分类 基于知识方法主要利用先验知识将人脸看作器官特征的组合,根据眼睛 ...

  8. OpenCV人脸检测与三角剖分绘制

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 一:三角剖分概念(Triangulation) 三角剖分最早是俄国 ...

  9. keras系列︱人脸表情分类与识别:opencv人脸检测+Keras情绪分类(四)

    人脸识别热门,表情识别更加.但是表情识别很难,因为人脸的微表情很多,本节介绍一种比较粗线条的表情分类与识别的办法. Keras系列: 1.keras系列︱Sequential与Model模型.kera ...

最新文章

  1. 【camera-radar】基于ROS的多传感器融合感知系统实现(雷达+相机)(2)
  2. 1月23日服务器例行维护更新公告,1月24日服务器例行维护公告(已完成)
  3. 彻底理解cookie,session,localStorage(附代码)
  4. android viewgroup 事件,android中viewgroup的事件传递分析
  5. 启用轻资产、重运营、降杠杆,红星美凯龙能否瘦成“家得宝”?
  6. php采集一言代码_PHP简单实现一言 / 随机一句功能
  7. Android 源码获取-----在Windows环境下通过Git得到Android源代码
  8. python基础(笔记)
  9. [vscode] 显示空格
  10. sendmessage()模拟鼠标点击
  11. 健康档案管理系统方案/案列/APP/软件/小程序
  12. 唐巧iOS博客好文列表
  13. [Excel]sumif函数对满足条件的单元格求和
  14. 你可以穿裙子,但是请放长你的裙摆
  15. 绿布抠像怎么抠干净_AE如何抠取绿幕视频 干净抠像教程
  16. 关于C++ STL中的upper_bound()
  17. 多模态情感分析研究综述 论文笔记
  18. racket android,RacketGhost | F-Droid - Free and Open Source Android App Repository
  19. 基于Rplidar二维雷达使用Hector_SLAM算法在ROS中建图
  20. python程序设计清华大学出版社答案_Python程序设计-清华大学出版社-董付国第1章基础知识.ppt...

热门文章

  1. 成都百择电商:开通抖音小店要押金吗?
  2. 基于WiFi的宿舍智能安防系统
  3. excel数据处理_excel数据处理:说说数据源表必须遵守的那些规则
  4. 你最珍贵我最爱你用计算机咋弹,你最珍贵我最爱(Radio Edit)
  5. android二维码开发的实用案例
  6. 生信人(R、LINUX、RNA-seq习题)
  7. python爬虫难点_python网页爬虫浅析
  8. Adobe认证是什么?
  9. (B站云e办)SpringBoot开发项目实战记录(七)(员工管理(分页知识))
  10. 牛客网在线编程专题《剑指offer-面试题28》字符串的排列