1.首先实现人脸检测

 import cv2

 img = cv2.imread("people.jpg",1)  #读入图像
#导入人脸级联分类器引擎,“.xml”文件里包含了训练出来的人脸特征
face_engine = cv2.CascadeClassifier(cv2.data.haarcascades+'haarcascade_frontalface_default.xml')
#用人脸级联分类器引擎进行人脸识别,返回的faces为人脸的坐标列表
#scaleFactor--表示在前后两次相继的扫描中,搜索窗口的比例系数。默认为1.1即每次搜索窗口依次扩大10%; 
#minNeighbors--表示构成检测目标的相邻矩形的最小个数(默认为3个)。
#如果min_neighbors 为 0, 则函数不做任何操作就返回所有的被检候选矩形框,
#这种设定值一般用在用户自定义对检测结果的组合程序上;
faces = face_engine.detectMultiScale(img,scaleFactor=1.1,minNeighbors=3) # 对每一张脸,进行如下操作
for (x,y,w,h) in faces:
#画人脸框,bgr ,width
img = cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
#在“output”窗口中展示效果图
cv2.imshow("output",img)
# 监听键盘上的任何按键,如果有按键即退出并且关闭窗口,并将图片保存为output.jpg
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.imwrite("output1.jpg",img)

输入:

输出:

2.对单张图片进行人脸和人眼检测

 import cv2

 img = cv2.imread("img4.jpg",1)  #读入图像

 face_engine = cv2.CascadeClassifier(cv2.data.haarcascades+'haarcascade_frontalface_default.xml')
eye_engine = cv2.CascadeClassifier(cv2.data.haarcascades+'haarcascade_eye.xml') faces = face_engine.detectMultiScale(img,scaleFactor=1.1,minNeighbors=3) # 对每一张脸,进行如下操作
for (x,y,w,h) in faces:
#画人脸框,bgr ,width
img = cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
#在框选出人脸的区域进行人眼的检测,节省计算资源,
faces_area = img[y:y+h,x:x+w]
#scaleFactor默认1.1,minNeighbors默认3
eyes = eye_engine.detectMultiScale(faces_area,1.0132,1)
for (ex,ey,ew,eh) in eyes:
#画出人眼的框
cv2.rectangle(faces_area,(ex,ey),(ex+ew,ey+eh),(0,255,0),1)
#在“output”窗口中展示效果图
cv2.imshow("output",img)
# 监听键盘上的任何按键,如果有按键即退出并且关闭窗口,并将图片保存为output.jpg
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.imwrite("output_1.jpg",img)

输入一样

输出:

3.加入微笑识别

 import cv2

 img = cv2.imread("img4.jpg",1)  #读入图像

 face_engine = cv2.CascadeClassifier(cv2.data.haarcascades+'haarcascade_frontalface_default.xml')
eye_engine = cv2.CascadeClassifier(cv2.data.haarcascades+'haarcascade_eye.xml')
smile_engine = cv2.CascadeClassifier(cv2.data.haarcascades+'haarcascade_smile.xml') faces = face_engine.detectMultiScale(img,scaleFactor=1.1,minNeighbors=5) # 对每一张脸,进行如下操作
for (x,y,w,h) in faces:
#画人脸框,bgr ,width
img = cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
#在框选出人脸的区域进行人眼的检测,节省计算资源,
faces_area = img[y:y+h,x:x+w] # 人眼检测
#scaleFactor默认1.1,minNeighbors默认3
eyes = eye_engine.detectMultiScale(faces_area,1.3,6)
for (ex,ey,ew,eh) in eyes:
#画出人眼的框
cv2.rectangle(faces_area,(ex,ey),(ex+ew,ey+eh),(0,255,0),1) # 微笑检测
smiles = smile_engine.detectMultiScale(faces_area,1.3,2)
for (ex,ey,ew,eh) in smiles:
cv2.rectangle(faces_area,(ex,ey),(ex+ew,ey+eh),(0,0,255),1)
cv2.putText(img,'Smile',(x,y-3),1,1.5,(0,0,255),2,cv2.LINE_8) #在“output”窗口中展示效果图
cv2.imshow("output",img)
# 监听键盘上的任何按键,如果有按键即退出并且关闭窗口,并将图片保存为output.jpg
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.imwrite("output4_2.jpg",img)

输出:

opencv实现人脸,人眼,微笑检测的更多相关文章

  1. opencv+opencv_contrib 人脸识别和检测 python开发环境快速搭建(30分钟)图文教程

    很多朋友为了学习python.ML(机器学习).DL(深度学习).opencv等花费了大量时间配置安装环境(一个朋友花了4天时间才配置好)各种搜索.下载.安装配置,出问题等. 市面上的配置资料很多,选 ...

  2. SmileyFace——基于OpenCV的人脸人眼检测、面部识别程序

    项目地址 https://github.com/guoyaohua/SmileyFace 开发环境 Visual Studio 2010 MFC + OpenCV 功能描述 静态图像人脸检测 视频人脸 ...

  3. 【图像处理】使用OpenCV实现人脸和行人检测

      OpenCV全称是Open source Computer Vision Library(开放源代码计算机视觉库),是一个用于图像处理.分析.机器视觉方面的开源函数库,提供了很多图像处理的工具和可 ...

  4. Python 3 利用 Dlib 19.7 和 sklearn机器学习模型 实现人脸微笑检测

    0.引言  利用机器学习的方法训练微笑检测模型,给一张人脸照片,判断是否微笑:   使用的数据集中69张没笑脸,65张有笑脸,训练结果识别精度在95%附近: 效果: 图1 示例效果 工程利用pytho ...

  5. 【AdaBoost算法】基于OpenCV实现人脸检测Demo

    一.关于检测算法 分类器训练: 通过正样本与负样本训练可得到分类器,opencv有编译好的训练Demo,按要求训练即可生成,这里我们直接使用其已经训练好的分类器检测: 检测过程: 检测过程很简单,可以 ...

  6. Python学习--使用dlib、opencv进行人脸检测标注

    参考自https://www.pyimagesearch.com/2017/04/03/facial-landmarks-dlib-opencv-python/ 在原有基础上有一部分的修改(image ...

  7. OpenCV + Python 人脸检测

    必备知识 Haar-like opencv api 读取图片 灰度转换 画图 显示图像 获取人脸识别训练数据 探测人脸 处理人脸探测的结果 实例 图片素材 人脸检测代码 人脸检测结果 总结 下午的时候 ...

  8. 【转载】opencv实现人脸检测

    全文转载自CSDN的博客(不知道怎么将CSDN的博客转到博客园,应该没这功能吧,所以直接复制全文了),转载地址如下 http://blog.csdn.net/lsq2902101015/article ...

  9. Java+opencv实现人脸检测

    版本 Java1.8 opencv3.4 代码: import java.awt.Graphics; import java.awt.image.BufferedImage; import javax ...

随机推荐

  1. ATan2与ATan的区别

    相比较ATan,ATan2究竟有什么不同?本篇介绍一下ATan2的用法及使用条件. 对于tan(θ) = y / x: θ = ATan(y / x)求出的θ取值范围是[-PI/2, PI/2]. θ ...

  2. YTU 1075: Time

    1075: Time 时间限制: 1 Sec  内存限制: 128 MB 提交: 7  解决: 7 [提交][状态][讨论版] 题目描述 Digital clock use 4 digits to e ...

  3. mac系统下设置eclipse的补全快捷键方法

    eclispe Word Completion 的默认快捷键是Alt+/eclipse Content Assist 的默认快捷键是Ctrl+Space在使用中发现Word Completion经常导 ...

  4. Spring 各种注解(@)的含义与认识

    依赖注入,从字面上理解,即是:以注入的方式实现依赖: Spring 容器负责创建应用程序中的 bean,并通过 DI(依赖注入)来协调这些对象之间的关系.当描述 bean 如何进行装配(autowir ...

  5. BZOJ_2821_作诗(Poetize)_分块

    BZOJ_2821_作诗(Poetize)_分块 Description 神犇SJY虐完HEOI之后给傻×LYD出了一题:SHY是T国的公主,平时的一大爱好是作诗.由于时间紧迫,SHY作完诗 之后还要 ...

  6. tcp/ip网络通讯安全加密方法

    tcp/ip网络通讯安全是一个广受关注的话题,现在也有一些基于tcp/ip加密技术标准如SSL,TLS等.但很多时候编写一些简单的网络通讯把这标准加密应用添加进来乎一下子把程序变得复杂了,而实现自己的 ...

  7. str函数isdigit、isdecimal、isnumeric的区别

    s为字符串s.isalnum() 所有字符都是数字或者字母s.isalpha() 所有字符都是字母s.isdigit() 所有字符都是数字s.islower() 所有字符都是小写s.isupper() ...

  8. Swift4 构造体, 属性, 索引

    创建: 2018/02/19 完成: 2018/02/25 [任务表]TODO  构造体定义  定义的概要 struct 型名 { (变量/常量的定义) (构造函数的定义) (方法的定义) (其他定义 ...

  9. vue中的列表项删除操作

    <script> Vue({ data: { orders: [] }, created() { $.get( { url: 'orders', dataType: 'json' }) . ...

  10. jQuery笔记之data方法

    成品图如下所示: 搭建HTML+CSS结构 <style> /* 给tpl设置为不可见,因为我们不需要用到他,我们只是要克隆他身上的东西,克隆完就把他删掉.就跟渣男一样!!!*/ .tpl ...