配好了OpenCV的Python环境,OpenCV的Python环境搭建。于是迫不及待的想体验一下opencv的人脸识别,如下文。

必备知识

Haar-like

Haar-like百科释义。通俗的来讲,就是作为人脸特征即可。

Haar特征值反映了图像的灰度变化情况。例如:脸部的一些特征能由矩形特征简单的描述,如:眼睛要比脸颊颜色要深,鼻梁两侧比鼻梁颜色要深,嘴巴比周围颜色要深等。

opencv api

要想使用opencv,就必须先知道其能干什么,怎么做。于是API的重要性便体现出来了。就本例而言,使用到的函数很少,也就普通的读取图片,灰度转换,显示图像,简单的编辑图像罢了。

读取图片

只需要给出待操作的图片的路径即可。

import cv2
image = cv2.imread(imagepath)

灰度转换

灰度转换的作用就是:转换成灰度的图片的计算强度得以降低。

import cv2
gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)

画图

opencv 的强大之处的一个体现就是其可以对图片进行任意编辑,处理。 
下面的这个函数最后一个参数指定的就是画笔的大小。

import cv2
cv2.rectangle(image,(x,y),(x+w,y+w),(0,255,0),2)

显示图像

编辑完的图像要么直接的被显示出来,要么就保存到物理的存储介质。

import cv2
cv2.imshow("Image Title",image)

获取人脸识别训练数据看似复杂,其实就是对于人脸特征的一些描述,这样opencv在读取完数据后很据训练中的样品数据,就可以感知读取到的图片上的特征,进而对图片进行人脸识别。

import cv2
face_cascade = cv2.CascadeClassifier(r'./haarcascade_frontalface_default.xml')

里卖弄的这个xml文件,就是opencv在GitHub上共享出来的具有普适的训练好的数据。我们可以直接的拿来使用。

训练数据参考地址:https://github.com/opencv/opencv/tree/master/data/haarcascades

探测人脸

说白了,就是根据训练的数据来对新图片进行识别的过程。

import cv2

# 探测图片中的人脸

faces = face_cascade.detectMultiScale(
gray,
scaleFactor = 1.15,
minNeighbors = 5,
minSize = (5,5),
flags = cv2.cv.CV_HAAR_SCALE_IMAGE
)

我们可以随意的指定里面参数的值,来达到不同精度下的识别。返回值就是opencv对图片的探测结果的体现。

处理人脸探测的结果

结束了刚才的人脸探测,我们就可以拿到返回值来做进一步的处理了。但这也不是说会多么的复杂,无非添加点特征值罢了。

import cv2

print "发现{0}个人脸!".format(len(faces))

for(x,y,w,h) in faces:
cv2.rectangle(image,(x,y),(x+w,y+w),(0,255,0),2)

实例

有了刚才的基础,我们就可以完成一个简单的人脸识别的小例子了。

下面的这张图片将作为我们的检测依据。

人脸检测代码

# coding:utf-8
import sys reload(sys)
sys.setdefaultencoding('utf8')
# __author__ = '郭 璞'
# __date__ = '2016/9/5'
# __Desc__ = 人脸检测小例子,以圆圈圈出人脸
import cv2
# 待检测的图片路径
imagepath = r'./heat.jpg' # 获取训练好的人脸的参数数据,这里直接从GitHub上使用默认值
face_cascade = cv2.CascadeClassifier(r'./haarcascade_frontalface_default.xml') # 读取图片
image = cv2.imread(imagepath)
gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY) # 探测图片中的人脸
faces = face_cascade.detectMultiScale(
gray,
scaleFactor = 1.15,
minNeighbors = 5,
minSize = (5,5),
flags = cv2.cv.CV_HAAR_SCALE_IMAGE
) print "发现{0}个人脸!".format(len(faces)) for(x,y,w,h) in faces:
# cv2.rectangle(image,(x,y),(x+w,y+w),(0,255,0),2)
cv2.circle(image,((x+x+w)/2,(y+y+h)/2),w/2,(0,255,0),2) cv2.imshow("Find Faces!",image)
cv2.waitKey(0)

输出图片: 

输出结果:

D:\Software\Python2\python.exe E:/Code/Python/DataStructor/opencv/Demo.py
发现3个人脸!

详情见:案例参考

总结

回顾一下,这次的实验就是简单的对opencv的常用的api的使用,重点在于训练数据的使用和人脸探测的处理。

搜索887934385交流群,群内分享干货最后,感谢观看!

手把手教你如何用 OpenCV + Python 实现人脸检测的更多相关文章

  1. 手把手教你如何用 OpenCV + Python 实现人脸识别

    下午的时候,配好了OpenCV的Python环境,OpenCV的Python环境搭建.于是迫不及待的想体验一下opencv的人脸识别,如下文. 必备知识 Haar-like 通俗的来讲,就是作为人脸特 ...

  2. OpenCV + python 实现人脸检测(基于照片和视频进行检测)

    OpenCV + python 实现人脸检测(基于照片和视频进行检测) Haar-like 通俗的来讲,就是作为人脸特征即可. Haar特征值反映了图像的灰度变化情况.例如:脸部的一些特征能由矩形特征 ...

  3. opencv+python实时人脸检测、磨皮

    import numpy as np import cv2 cap = cv2.VideoCapture(0) face_cascade = cv2.CascadeClassifier("d ...

  4. OpenCV例程实现人脸检测

    前段时间看的OpenCV,其实有很多的例子程序,参考代码值得我们学习,对图像特征提取三大法宝:HOG特征,LBP特征,Haar特征有一定了解后. 对本文中的例子程序刚开始没有调通,今晚上调通了,试了试 ...

  5. OpenCV入门指南----人脸检测

    本篇介绍图像处理与模式识别中最热门的一个领域——人脸检测(人脸识别).人脸检测可以说是学术界的宠儿,在不少EI,SCI高级别论文都能看到它的身影.甚至很多高校学生的毕业设计都会涉及到人脸检测.当然人脸 ...

  6. opencv 美白磨皮人脸检测<转>

    1. 简介 这学期的计算机视觉课,我们组的课程项目为“照片自动美化”,其中我负责的模块为人脸检测与自动磨皮.功能为:用户上传一张照片,自动检测并定位出照片中的人脸,将照片中所有的人脸进行“磨皮”处理, ...

  7. OpenCV神技——人脸检测,猫脸检测

    简介   OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux.Windows.Android和Mac OS操作系统上.它轻量级而且高效--由一系列 C 函数和少量 ...

  8. Android—基于OpenCV+Android实现人脸检测

    导读 OpenCV 是一个开源的跨平台计算机视觉库, 采C++语言编写,实现了图像处理和计算机视觉方面的很多通用算法,同时也提供对Python,Java,Android等的支持,这里利用Android ...

  9. 使用python实现人脸检测

    人脸检测 人脸检测使用到的技术是OpenCV,上一节已经介绍了OpenCV的环境安装,点击查看. 功能展示 识别一种图上的所有人的脸,并且标出人脸的位置,画出人眼以及嘴的位置,展示效果图如下: 多张脸 ...

随机推荐

  1. Github访问速度很慢的原因,以及解决方法

    1,CDN,Content Distribute Network,可以直译成内容分发网络,CDN解决的是如何将数据快速可靠从源站传递到用户的问题.用户获取数据时,不需要直接从源站获取,通过CDN对于数 ...

  2. 解决idea中mysql连接失败Could not create connection to database server. Attempted reconnect 3 times. Giving up.

    原因是少一个参数,设置时区的.  解决方法: 加一个参数: serverTimezone=UTC jdbc:mysql://localhost:3306/SshProject?useUnicode=t ...

  3. MySQL数据库:group分组

    group by:分组 GroupBy语句从英文的字面意义上理解就是"根据(by)一定的规则进行分组(Group)".它的作用是通过一定的规则将一个数据集划分成若干个小的区域,然后 ...

  4. 关于soapui接口的笔记

    1.接口包含内容 #request: HTTP版本/请求地址url 请求方法:GET.POST.PUT.DELETE等 请求头:content—type 请求正文:请求参数 #response: 状态 ...

  5. 带有Spring Boot和MySQL的Docker:简介(Part 1)

    通过优锐课java学习分享中,我们看一下带有Spring Boot和MySQL的Docker教程.非常实用,分享给大家参考学习. Docker是一种技术,开发人员或DevOps团队可以使用容器来构建, ...

  6. JS-时间相关的函数封装

    1.用JS把时间戳转换为时间,代码如下: //时间戳转换为时间 function timestampToTime(timestamp) { var date = new Date(timestamp) ...

  7. 移动端触发touchend后阻止click事件

    // vue里面简单的处理方式,可以同时兼容PC和移动端 <div @touchend.stop.prevent="doSomething" @click.stop.prev ...

  8. maven私服的配置使用

    maven的仓库分为本地仓库,远程仓库和私服仓库. 私服仓库一般是公司内部私有的,内部进行维护的.公司员工连接私服,从私服中下载jar,或者将自身的jar传到私服上.私服还可以从中央仓库下载jar,当 ...

  9. ASP.NET MVC教程一:ASP.NET MVC简介

    一.MVC模式简介 MVC模式是一种流行的Web应用架构技术,它被命名为模型-视图-控制器(Model-View-Controller).在分离应用程序内部的关注点方面,MVC是一种强大而简洁的方式, ...

  10. .NET Core 数据结构与算法 1-1

    .NET Core 数据结构与算法 1-1 本节内容为顺序表 简介 线性表是简单.基本.常用的数据结构.线性表是线性结构的抽象 (Abstract),线性结构的特点是结构中的数据元素之间存在一对一的线 ...