专栏首页小詹同学人脸检测(一)——基于单文档的应用台程序

人脸检测(一)——基于单文档的应用台程序

Opencv自带训练好的人脸模型(人脸的人眼、口等器官类似),此文基于vs2013建立应用台单文档程序,具体建立过程不予详细叙述,主要记录利用的Opencv自带的分类器和训练好的人脸模型。

一、编程前的准备

(1)Haar特征分类器

Haar特征分类器就是一个XML文件,该文件中会描述人体各个部位的Haar特征值。包括人脸、眼睛、嘴唇等等。

Haar特征分类器存放目录:OpenCV安装目录中的\data\ haarcascades目录下,例如:

  1. haarcascade_eye.xml
  2. haarcascade_eye_tree_eyeglasses.xml
  3. haarcascade_frontalface_alt.xml
  4. haarcascade_frontalface_alt_tree.xml
  5. haarcascade_frontalface_alt2.xml
  6. haarcascade_frontalface_default.xml
  7. haarcascade_fullbody.xml
  8. haarcascade_lefteye_2splits.xml
  9. haarcascade_lowerbody.xml
  10. haarcascade_mcs_eyepair_big.xml
  11. haarcascade_mcs_eyepair_small.xml
  12. haarcascade_mcs_leftear.xml

……

(详情见不同版本的data/ haarcascades目录下)

例如此次程序进行人脸识别,需要将分类器haarcascade_frontalface_alt2.xm复制到所建项目的可运行文件夹内

(2).对CascadeClassifier做初始化

cv::CascadeClassifier classifier;

classifier.load(“cascade.xml”); //这里的xml是训练得到的分类器

CascadeClassifier类中既有load也有read函数,二者是相同的,load将引用read函数

(3 )关于detectMultiScale()

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()

);

函数介绍:

参数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 <opencv2/core/core.hpp>

#include <opencv2/imgproc/imgproc.hpp>

#include <opencv2/opencv.hpp>

#include <vector>

#include <cstdio>

using namespace cv;

using namespace std;

笔者将人脸检测分为如下几个步骤:

(1)加载分类器:

(2)读取图片

(3)检测

(4)标记

(5)显示

具体程序实例如下:

三、编程后的展示

运行程序可得到待识别的原图和检测结果图以及显示共检测到的人脸个数:选取三组实验,其显示结果如图所示:

实验1:国民闺女

实验2:who?

实验3:可看过?

以上就是这一期内容,自己总结一遍确实加深了印象,cv之路漫长,希望自己好好学习,坚持下去,学会c++和python。。。

本文分享自微信公众号 - 小小詹同学(xiaoxiaozhantongxue),作者:Jan

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-12-31

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 如何爬取任意指定网易云歌曲

    话不多说 ,转载一篇朋友的好文如下 ,助你爬天爬地爬空气 !今天来爬一爬指定的网易云音乐歌曲 。

    小小詹同学
  • 骚操作!曾经爱过!用 Python 清理收藏夹里已失效的网站

    我们日常浏览网站的时候,时不时会遇到些新奇的东西( 你懂的.jpg ),于是我们就默默的点了个收藏或者加书签。然而当我们面对成百上千的书签和收藏夹的时候,总会头...

    小小詹同学
  • 被骂了三年,谷歌Dropout专利还是生效了,卡脖子预警

    所谓Dropout是一种搞深度学习、训练神经网络时,普遍会用到的方法,由Hinton于2012年提出,可以有效防止过拟合。

    小小詹同学
  • 页面缓存之Meta http-equiv属性详解

    deepcc
  • 页面缓存之Meta http-equiv属性详解

    deepcc
  • 面对突发需求,如何借助 Serverless 快速上云 | 直播分享

    当突发事件来临时,当绝佳 idea 闪现时,如何快速搞定开发和部署,使之变身为产品?快,则应万变!Serverless 具有拥有免运维、开发成本降低、按需自动...

    腾讯云serverless团队
  • 怒解Workerman之select IO复用(十)

    在第八章和第九章的案例中,哥用socket和fork等基础为为大家表演了如下一波儿:

    老李秀
  • tcp服务端socket

    skylark
  • Python 实战TCP的服务端 - 胖子老板就是服务端

    client (肥仔白) -- "来包利群啦" --> server(胖子老板) client (肥仔白) <-- "给你啦" -- server(胖子老板)

    Devops海洋的渔夫
  • Oracle之SQL优化专题02-稳固SQL执行计划的方法

    糟糕的SQL执行,执行计划走全表扫描(这里实验直接利用使用hint强制不走索引来模拟这种情况):

    Alfred Zhao

扫码关注云+社区

领取腾讯云代金券