# 识别眼睛、嘴巴、人脸
image = cv2.imread('./yong.jpg') gray = cv2.cvtColor(image,code=cv2.COLOR_BGR2BGRA)
# 加载算法
face_detector = cv2.CascadeClassifier('./haarcascade_frontalface_default.xml')
eye_detector = cv2.CascadeClassifier('./haarcascade_eye.xml')
mouth_detector = cv2.CascadeClassifier('./haarcascade_mcs_mouth.xml') face_zone = face_detector.detectMultiScale(gray,1.3,3,minSize=(80,80))
print(face_zone)
for x,y,w,h in face_zone:
cv2.rectangle(image, pt1=(x,y),pt2=(x+w,y+h), color=[0,0,255],thickness=2) # 人脸切分
h_up = int(face_zone[0,-1]*0.6)
x,y,w,h = face_zone.reshape(-1)
# 头部
head = gray[y:y+h,x:x+w]
head_up = head[0:h_up]
head_down = head[h_up:]
# 检测眼睛
eye_zone = eye_detector.detectMultiScale(head_up,1.3,3,minSize=(10,10))
for ex,ey,ew,eh in eye_zone:
cv2.rectangle(image, pt1=(ex + x,ey+y), pt2=(ex+ew+x,ey+eh+y),color=[0,255,0],thickness=1) # 检查嘴
mouth_zone = mouth_detector.detectMultiScale(head_down,1.3,3,minSize=(10,10))
for mx,my,mw,mh in mouth_zone:
cv2.rectangle(image, pt1=(mx + x,my+y+h_up), pt2=(mx+mw+x,my+mh+y+h_up),color=[255,0,0],thickness=1) cv2.imshow('liyong', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

  代码第一行:    导入图片

  第二行:      灰度化处理

  第六--九行:    读取特征数据,并使用分类器对特征数据进行处理

  第十--十三行:   进行人脸识别

  第十五--二十一行: 进行人脸切分,在上部分识别眼睛;人脸下部分识别嘴的预处理

  第二十三--二十五行:  识别眼睛

  第二十八--三十行:  识别嘴 

  将人脸眼睛替换成自定义眼睛:

  只需要将上面的第24到25行修改成

eye = cv2.imread('./eye.jpg')
for ex,ey,ew,eh in eye_zone:
# cv2.rectangle(image, pt1=(ex + x,ey+y), pt2=(ex+ew+x,ey+eh+y),color=[0,255,0],thickness=1)
# 眼睛缩放
eye2 = cv2.resize(eye,dsize=(ew,eh))
# 替换
image[y+ey: y+ey+eh,ex+x:ex+x+ew] = eye2

  eye2 = cv2.resize(eye,dsize=(ew,eh))    将读取的图片换成识别出的眼睛大小

  

OpenCV-Python 人脸眼睛嘴识别的更多相关文章

  1. OpenCV + Python 人脸检测

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

  2. 基于OpenCv的人脸检测、识别系统学习制作笔记之三

    1.在windows下编写人脸检测.识别系统.目前已完成:可利用摄像头提取图像,并将人脸检测出来,未进行识别. 2.在linux下进行编译在windows环境下已经能运行的代码. 为此进行了linux ...

  3. OpenCV+python 人脸识别

    首先给大家推荐一本书:机器学习算法原理与编程实践 本文内容全部转载于书中,相当于一个读书笔记了吧 绪论 1992年麻省理工学院通过实验对比了基于结构特征的方法与基于模版匹配的方法,发现模版匹配的方法要 ...

  4. 基于QT和OpenCV的人脸检測识别系统(2)

    紧接着上一篇博客的讲 第二步是识别部分 人脸识别 把上一阶段检測处理得到的人脸图像与数据库中的已知 人脸进行比对,判定人脸相应的人是谁(此处以白色文本显示). 人脸预处理 如今你已经得到一张人脸,你能 ...

  5. 基于Opencv的人脸检测及识别

    一.实验目的:我这里完成的是,将8张人脸图片(4组,每组两张)存入库中,选取1张图片,程序识别出与其匹配的另一张. 这里介绍分三个步骤完成该工作,①程序读取摄像头.拍照 ②程序从电脑文档中读取图片   ...

  6. 基于OpenCv的人脸检测、识别系统学习制作笔记之一

    基于OpenCv从视频文件到摄像头的人脸检测 在OpenCv中读取视频文件和读取摄像头的的视频流然后在放在一个窗口中显示结果其实是类似的一个实现过程. 先创建一个指向CvCapture结构的指针 Cv ...

  7. 基于QT和OpenCV的人脸检測识别系统(1)

    人脸识别分为两大步骤 1.人脸检測 这个是首要实现的.你得实现人脸显示的时候把人脸框出来,当然算法非常多,另一些人眼检測鼻子检測什么的 主要用的是这个 const char *faceCascadeF ...

  8. 基于OpenCv的人脸检测、识别系统学习制作笔记之二

    在网上找到了一个博客,里面有大量内容适合初学者接触和了解人脸检测的博文,正好符合我目前的学习方面,故将链接放上来,后续将分类原博客的博文并加上学习笔记. 传送门: http://blog.sina.c ...

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

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

随机推荐

  1. 【转】Web服务器之Nginx详解(理论部分)

    大纲 一.前言 二.Web服务器提供服务的方式 三.多进程.多线程.异步模式的对比 四.Web 服务请求过程 五.Linux I/O 模型 六.Linux I/O 模型具体说明 七.Linux I/O ...

  2. git中忽略文件权限或文件拥有者的改变

    在发布项目到线上时,很多时候需要修改文件的权限,如果是使用git版本管理软件来发布的话,那么下次更新线上文件的时候就会提示文件冲突.明明文件没有修改,为什么会冲突呢?原来git把文件权限也算作文件差异 ...

  3. shell链接

    5个实用的shell脚本面试题和答案: http://www.cnblogs.com/xinjie10001/p/6395945.html linux shell 逻辑运算符.逻辑表达式详细介绍: h ...

  4. January 23 2017 Week 4 Monday

    Knowledge is long, life is short. 吾生也有涯,而知也无涯. I often feel that I have a lot of things to learn, ne ...

  5. c++内存区域结构及堆栈的一些知识

    一.c++在内存区域的分配图 可以看出,对于Linux系统下的,存储空间的分配有着较为层次清晰的分层.单片机大概也遵循这个分区架构. 二进制代码以及常量(CONST修饰)以及全局变量在最底层,存储空间 ...

  6. dom4j.jar有什么作用?

    om4j是一个Java的XML API,类似于jdom,用来读写XML文件的.dom4j是一个非常非常优秀的Java XML API,具有性能优异.功能强大和极端易用使用的特点,同时它也是一个开放源代 ...

  7. 文件是数据(字节)流的抽象-为什么C++中会把文件操作抽象为fstream?

    这不过是返祖罢了.正确的问题是为什么会把数据流抽象成文件. 设备-字节流-文件. 一切皆为文件,所有不同种类的类型都被抽象成文件(比如:块设备,socket套接字,pipe队列). 文件抽象为数据流一 ...

  8. JDBC(1)简单介绍/数据库的连接

    初识JDBC: JDBC是java连接数据库的一个工具,没有这个工具,java将无法和数据库进行连接. JDBC API: JDBC是个“低级”接口,也就是说,他直接用于调用SQL命令. JDBC驱动 ...

  9. 调节Ubuntu分辨率

    列出当前支持的分辨率 使用 xrandr 命令新增显示模式 至此分辨率更改完成 重启后会失效 在 ~/.profile 最末尾添加修改分辨率的命令

  10. 从源码看String,StringBuffer,StringBuilder的区别

    前言 看了一篇文章,大概是讲面试中的java基础的,有如题这么个面试题.我又翻了一些文章看了下,然后去看源码.看一下源码大概能更加了解一些. String String类是final的,表示不可被继承 ...