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. Lightoj 1006 Hex-a-bonacci

    Given a code (not optimized), and necessary inputs, you have to find the output of the code for the ...

  2. 四.OC基础--1.文档安装和方法重载,2.self和super&static,3.继承和派生,4.实例变量修饰符 ,5.私有变量&私有方法,6.description方法

    四.OC基础--1.文档安装和方法重载, 1. 在线安装 xcode-> 系统偏好设置->DownLoads->Doucument->下载 2. 离线安装 百度xcode文档 ...

  3. 04_显示意图打开activity

    实际上用显式意图打开一个activity就很简单了.只需要指定你要打开的这个activity的class就可以了. 需要注意一点的是创建了一个ThirdActivity必须要在清单文件里面声明.如果没 ...

  4. C#基础第一天 VS2013基本设置

    1 .net能干什么 桌面应用程序 winform internet应用程序 Asp.net->京东.msdn.招聘银行 手机开发 wp8 unity3D游戏开发或者虚拟现实 2 .net两种交 ...

  5. Xenocode Postbuild 2010 for .NET 使用

    代码混淆工具 参考地址1:http://blog.csdn.net/yanpingsoft/article/details/7997212 参考地址2:http://www.cnblogs.com/w ...

  6. jQuery入坑指南

    前言 Ajax官方文档 爱jQuery jQuery插件库 jQuery中文api input 赋值和取值 记录一下: 在写一个input赋值,二话不说就直接利用了$('#xx').val()来进行取 ...

  7. 3 Java对象的内存布局以及对象的访问定位

    先来看看Java对象在内存中的布局   一 Java对象的内存布局 在HotSpot虚拟机中,对象在内存中的布局分为3个区域 对象头(Header) Mark Word(在32bit和64bit虚拟机 ...

  8. 洛谷P4344 [SHOI2015]脑洞治疗仪(珂朵莉树)

    传送门 看到区间推倒……推平就想到珂朵莉树 挖脑洞直接assign,填坑先数一遍再assign再暴力填,数数的话暴力数 //minamoto #include<iostream> #inc ...

  9. (8)css表格

    用css设置表格样式 *<table></table> 标签定义 HTML 表格. * tr 元素定义表格的行:th 元素定义表格的表头:td 元素定义表格中的单元格:capt ...

  10. X86 Linux 下 SIGBUS 总结

    SIGBUS 在 x86 Linux 上并不多见,但一旦出现,其调用堆栈常常让人摸不着头脑,加之信号问题各平台系统间差异较大,更让人难以理清,这里稍微总结一下 x86 Linux 上大概有哪些情形会触 ...