【opencv人脸识别一】从图片中检测人脸

本系列主要讲述利用opencv实现人脸识别的相关知识,并给出实际代码。且循序渐进,由基础到复杂,从最基本的图片检测人脸到视频检测、识别人脸,再到较大型人脸数据模型训练、识别。下边是本系列的主要目录:

1.  【opencv人脸识别1】从图片中检测人脸

2.  【opencv人脸识别2】从视频中检测人脸

3.  【opencv人脸识别3】从视频中识别出你的脸

4.   【opencv人脸识别4】训练人脸模型

5.   【opencv人脸识别5】通过建立模型(.xml文件)识别出你的脸

6.  【人脸识别6】用haar+adaboost训练自己的人脸检测器

7. 【人脸识别7】haar+CART+Adaboost+Cascade训练过程分析

注意:本系列的实验平台是VS2017+opencv3.4

1. 从图片中检测人脸

利用opencv3.4库中\opencv3_4\opencv\sources\data\haarcascades\文件夹下的haarcascade_frontalface_alt.xml文件,可以实现人脸检测。

haarcascade_frontalface_alt.xml是已经训练好的haar+adaboost人脸检测模型。其中,opencv提供了4种haar的人脸检测模型,具体可戳: https://blog.csdn.net/u012679707/article/details/80377387

从图片中检测人脸的代码:

// face_recog_from_picture.cpp: 定义控制台应用程序的入口点。#include "stdafx.h"
#include<opencv2/opencv.hpp>
#include<iostream>using namespace std;
using namespace cv;int main(int argc,char *argv[])
{Mat img = imread("she.jpg");namedWindow("display");imshow("display", img);/*********************************** 1.加载人脸检测器  ******************************/// 建立级联分类器CascadeClassifier cascade;// 加载训练好的 人脸检测器(.xml)const string path = "./xml/haarcascade_frontalface_alt.xml";if ( ! cascade.load(path)){cout << "cascade load failed!\n";}//计时double t = 0;t = (double)getTickCount();/*********************************** 2.人脸检测 ******************************/vector<Rect> faces(0);cascade.detectMultiScale(img, faces, 1.1, 2, 0 ,Size(30,30));cout << "detect face number is :" << faces.size() << endl;/********************************  3.显示人脸矩形框 ******************************/if (faces.size() > 0){for (size_t i = 0;i < faces.size();i++){rectangle(img, faces[i], Scalar(150, 0, 0), 3, 8, 0);}}else cout << "未检测到人脸" << endl;t = (double)getTickCount() - t;  //getTickCount():  Returns the number of ticks per second.cout << "检测人脸用时:" << t * 1000 / getTickFrequency() << "ms (不计算加载模型的时间)" << endl;namedWindow("face_detect");imshow("face_detect", img);while(waitKey(0)!='k') ;destroyWindow("display");destroyWindow("face_detect");return 0;
}

运行结果:

会发现,Selina的脸没有被识别出来。这可能是由于Selina的脸倾斜过大。下边我们想办法实现检测有一定倾斜度的脸。

附:

detectMultiScale源码解析
  */CV_WRAP void detectMultiScale( InputArray image,CV_OUT std::vector<Rect>& objects,double scaleFactor = 1.1,int minNeighbors = 3, int flags = 0,Size minSize = Size(),Size maxSize = Size() );/** @overload@param image Matrix of the type CV_8U containing an image where objects are detected. 输入图像@param objects Vector of rectangles where each rectangle contains the detected object, therectangles may be partially outside the original image.   输出检测到的人脸矩形@param numDetections Vector of detection numbers for the corresponding objects. An object's numberof detections is the number of neighboring positively classified rectangles that were joinedtogether to form the object.  @param scaleFactor Parameter specifying how much the image size is reduced at each image scale.缩放因子,此处为每次缩小10%@param minNeighbors Parameter specifying how many neighbors each candidate rectangle should haveto retain it.  最小检测邻域@param flags Parameter with the same meaning for an old cascade as in the functioncvHaarDetectObjects. It is not used for a new cascade.此参数用于老的版本中的cascade@param minSize Minimum possible object size. Objects smaller than that are ignored. 最小检测目标的尺寸,小于这个尺寸的不检测@param maxSize Maximum possible object size. Objects larger than that are ignored. If `maxSize == minSize` model is evaluated on single scale. 最大检测目标的尺寸*/   

-------------------------------------------         END      -------------------------------------

CSDN:大姨妈V 

微信公众号:happyZhou

版权声明:本文为博主原创文章,转载请附上博文链接!

【opencv人脸识别1】从图片中检测人脸相关推荐

  1. Python+OpenCv实现AI人脸识别身份认证系统(1)——人脸识别原理

    原 Python+OpenCv实现AI人脸识别身份认证系统(1)--人脸识别原理 置顶 2019年07月02日 08:47:40 不脱发的程序猿 阅读数 1255更多 所属专栏: 人脸识别身份认证系统 ...

  2. Python+OpenCv实现AI人脸识别身份认证系统(2)——人脸数据采集、存储

    原 Python+OpenCv实现AI人脸识别身份认证系统(2)--人脸数据采集.存储 2019年07月02日 08:47:52 不脱发的程序猿 阅读数 602更多 所属专栏: 人脸识别身份认证系统设 ...

  3. 计算机视觉子方向,计算机视觉方向简介 | 人脸识别中的活体检测算法综述

    原标题:计算机视觉方向简介 | 人脸识别中的活体检测算法综述 本文转载自"SIGAI人工智能学习与实践平台"(ID:SIGAICN) 导言 1. 什么是活体检测? 判断捕捉到的人脸 ...

  4. 人脸识别中的活体检测算法

    人脸识别中的活体检测算法综述 1. 什么是活体检测? 判断捕捉到的人脸是真实人脸,还是伪造的人脸攻击(如:彩色纸张打印人脸图,电子设备屏幕中的人脸数字图像 以及 面具 等) 2. 为什么需要活体检测? ...

  5. 人脸识别资源大列表(人脸识别检测,关键点检测 看这些就够了)

    文章内相关链接,可以直接点解页面 链接:点这里 几篇知乎 <人脸识别方向有哪些大牛?目前的发展如何? - 知乎> O从认知心理学的角度来说,人脸识别方向有哪些- <谈到人脸识别技术, ...

  6. Python+OpenCV实现AI人脸识别身份认证系统(1)—人脸识别原理

    目录 人脸识别流程 第一步:人脸检测,找出所有的面孔 第二步:脸部的不同姿势

  7. [转]人脸识别中的活体检测

    https://zhuanlan.zhihu.com/p/25401788 早在指纹识别应用中就有针对于活体手指的检测技术,即使机器只对真人活体指纹产生识别反应,对其他一切物质不作识别,用于指纹识别产 ...

  8. 人脸识别最低像素_深入浅出人脸识别技术

    在深度学习出现后,人脸识别技术才真正有了可用性.这是因为之前的机器学习技术中,难以从图片中取出合适的特征值.轮廓?颜色?眼睛?如此多的面孔,且随着年纪.光线.拍摄角度.气色.表情.化妆.佩饰挂件等等的 ...

  9. android虹软人脸识别简书,C# 离线人脸识别 虹软ArcFace 2.0 demo

    环境: win7以上 VS2013以上 sdk版本:ArcFace v2.0 x86 x64平台Debug.Release配置都已通过编译 下载地址:https://github.com/Arcsof ...

最新文章

  1. linux防火墙添加端口并开闭防火墙
  2. 检测跟踪分割网络笔记
  3. Angular Component代码和编译后生成的JavaScript代码
  4. RDIFramework.NET ━ .NET快速信息化系统开发框架 V2.8 版本━新增企业通(内部简易聊天工具)...
  5. X_Forwarded_for 获得真实IP
  6. 已处理证书链,但是在不受信任提供程序信任的根证书中终止 - Windows 7安装.Net Framework 4.7.2时出现此问题
  7. revit2016与2017区别_Revit2016版与Revit2018版的区别?
  8. 全连接层后面加bn层_神经网络基本组成 - 池化层、Dropout层、BN层、全连接层 13...
  9. Linux上解压缩.gz、.bz2、.tar、.tar.gz、tar.xz后缀文件
  10. java 根据条件从List中筛选出符合条件的集合
  11. 3dmax2014 uv用法_3ds max uv展开教程
  12. 信用评分卡建模:决策树模型
  13. Java 2.16(几何:六边形面积)编写程序,提示用户输入六边形的边长,然后显示它的面积。
  14. 设计一个排序和查找系统。能够实现对给定的一组学生的借书证信息(如:卡号、姓名、系别、班号等)进行排序和查找。
  15. Ubuntu16.04下安装MATLAB 2016b!完美运行
  16. 从gnuplot到GeoGebra的艰难之旅
  17. 分布式NoSQL列存储数据库Hbase(六)
  18. Angular防抖设计——点击事件
  19. 小波变换(matlab)-wavelet toolbox
  20. linux软链接与硬链接

热门文章

  1. 出行助手Vue项目中高德API的使用
  2. js-禁止微信内置浏览器调整字体大小
  3. JDK自带JVM工具
  4. java编程军规_java 编程军规
  5. SSD系列算法原理讲解----(1)SSD系列算法介绍(主干网络、多尺度Feature Map预测)(笔记)
  6. Unity之SkinMeshRenderer带骨骼的人体模型换装
  7. 计算机专业山东省内大学排名,山东计算机科学与技术专业大学排名 2020年省内录取分数线...
  8. 死锁简述(死锁产生的四个条件,预防死锁)
  9. 优盘婚礼MP4视频播放内容不全的文件修复技术
  10. iText7解套(二)中文行首行末标点符号处理