使用OpenCV进行人脸检测和戴墨镜特效实战(附Python源码)
需要源码和图片请点赞关注收藏后评论区留言私信~~~
人脸识别是基于人的脸部特征信息进行身份识别的一种生物识别技术,也是计算机视觉重点发展的技术。机器学习算法诞生之后,计算机可以通过摄像头等输入设备自动分析图像中包含的内容信息,随着技术的不断发展,现在已经有了多种人脸识别的算法
一、级联分类器
将一系列简单的分类器按照一定顺序级联到一起就构成了级联分类器,使用级联分类器的程序可以通过一系列简单的判断来对样本进行识别
opencv提供了一些已经训练好的级联分类器,这些级联分类器以XML文件的方式保存在路径下面
部分级联分类器XML的功能如下图
想要实现哪种图像检测,就要在程序启动时加载对应的级联分类器,下面介绍如何加载并使用这些XML文件
Opencv实现人脸检测需要两步操作:加载级联分类器和使用分类器识别图像,语法如下
<CascadeClassifier object>=cv2.CascadeClassifier(filename)
filename 级联分类器的XML文件名
object 分类器对象
然后使用已经创建好的分类器对图像进行识别,这个过程需要调用分类器对象的detectMultScale()方法,语法如下
objects=cascade.detectMultiScale(image,scaleFactor,minNeighbors,flags,minSize,maxSize)
image 待分析的图像
scaleFactor 可选参数 扫描时的缩放比例
下面进行人脸位置检测实战 检测到人脸则绘制红框
可见可以清晰的检测出人脸位置 部分代码如下
import cv2img = cv2.imread("model.png") # 读取人脸图像
# 加载识别人脸的级联分类器
faceCascade = cv2.CascadeClassifier("cascades\\haarcascade_frontalface_default.xml")
faces = .detectMuale(img, 1.3) # 识别出所有人脸
for (x, y, w) aces: # 遍历所有人脸的区域cv2.rectngle(imgx, ), (x + w, y + h), (0, 0, 255), 5) # 在图像中人脸的位置绘制方框
cv2.imshow("img", img) # 显示最终处理的效果
cv2.waitKey() # 按下任何键盘按键后
cv2.destroyAllWindows() # 释放所有窗体
实战2:戴墨镜特效
手机拍照软件自带各种各样的贴图特效,实际上这些贴图特效就是先定位了人脸位置,然后在人脸相应位置覆盖素材实现的,opencv也可以实现这个功能,分为以下三个步骤
1:编写一个覆盖图片的方法,因为素材中可能包含透明像素,这些透明像素不可以遮挡人脸,所以在覆盖图像时要做判断,忽略所有透明像素,判断一个像素是否为透明像素,只需要三通道转换为四通道,然后判断四通道的alpha值,1表示完全不透明,0表示完全透明
2:创建人脸识别级联分类器,分析图像中的人脸区域
3:把墨镜图像按照人脸宽度进行缩放,并覆盖到人脸大约三分之一的位置
效果如下
部分代码如下
import cv2# 覆盖图像
def oerl_img(img, img_over, img_over_x, img_over_y):""覆盖图像:aram img: 背景图像:param img_over: 覆盖的图像:par img_over_x: 覆盖图像在背景图像上的横坐标:param img_over_y: 覆盖图像在背景图像上的纵坐标:return: 两张图像合并之后的图像"""img_h, img_w, img_p = img.shape # 背景图像宽、高、通道数img_over_h, img_over_w, img_over_c = img_over.shape # 覆盖图像高、宽、通道数if img__c == 3: 通道数小于等于3img_over = cv2.cvtColor(img_over, cv2.COLOR_BGR2BGRA) # 转换成4通道图像for w in range( img_over_w): # 遍历列for h in rnge(0, img_over_h): # 遍历行if img_over[h, w, 3] != 0: # 如果不是全透明的像素for c inange(0, 3): # 遍历三个通道x = img_er_x + w # 覆盖像素的横坐标y = img_over_y + h # 覆盖像素的纵坐标if x >= img_w or y >= img_h: # 如果坐标超出最大宽高break # 不做操作img[y, x, c] = img_over[h, w, c] # 覆盖像素return img # 完成覆盖的图像face_img = cv2.imread("peoples.png") # 读取人脸图像
glass_img = cv2.imread("glass.png", cv2.IMREAD_UNCHANGED) # 读取眼镜图像,保留图像类型
height, width, channel = glass_img.shape # 获取眼镜图像高、宽、通道数
# 加载级联分类器
garyframe = cv2.cvtCoorface_img, cv2.COLOR_BGR2GRAY) # 转为黑白图像
faces = face_cascde.detectMultiScale(garyframe, 1.3, 5) # 识别人脸
for (x, y, w, h n faces: # 遍历所有人脸的区域gw = w # 眼镜缩放之后的宽度gh = ineight * w / width) # 眼镜缩放之后的高度度glass_img = cv2.resize(glass_img, (gw, gh)) # 按照人脸大小缩放眼镜overlay_img(face_img, glass_img, x, y + int(h * 1 / 3)) # 将眼镜绘制到人脸上
cv2.imshow("screen", face_img) # 显示最终处理的效果
cv2.waitKey() # 按下任何键盘按键后
cv2.destroyAllWindows() # 释放所有窗体
创作不易 觉得有帮助请点赞关注收藏~~~
使用OpenCV进行人脸检测和戴墨镜特效实战(附Python源码)相关推荐
- 深度学习目标检测系列:faster RCNN实现|附python源码
目标检测一直是计算机视觉中比较热门的研究领域,有一些常用且成熟的算法得到业内公认水平,比如RCNN系列算法.SSD以及YOLO等.如果你是从事这一行业的话,你会使用哪种算法进行目标检测任务呢?在我寻求 ...
- python实现目标检测源代码包_深度学习目标检测系列:faster RCNN实现|附python源码...
摘要: 本文在讲述RCNN系列算法基本原理基础上,使用keras实现faster RCNN算法,在细胞检测任务上表现优异,可动手操作一下. 目标检测一直是计算机视觉中比较热门的研究领域,有一些常用且成 ...
- OpenCV Dbt人脸检测Dbt face detection的实例(附完整代码)
OpenCV相 Dbt人脸检测Dbt face detection的实例 OpenCV Dbt人脸检测Dbt face detection的实例 OpenCV Dbt人脸检测Dbt face dete ...
- OpenCV检测眼睛、猫脸、行人、车牌实战(附Python源码)
需要源码和资源请点赞关注收藏后评论区留言私信~~~ OpenCV提供的级联分类器除了可以识别人脸之外,还可以识别其他一些具有明显特征的物体,如眼睛.行人等,下面介绍几个OpenCV自带的级联分类器的用 ...
- Unity SenseAR教程:人脸检测之放置脸部挂饰【含源码】
摘要:Unity+SenseAR开发的AR应用,基于人脸检测,给脸部添加装饰物~ 洪流学堂,让你快人几步.你好,我是你的技术探路者郑洪智,你可以叫我大智(vx: zhz11235). 之前探索了Sen ...
- OpenCV中LBPH人脸识别器识别人脸实战(附Python源码)
需要源码和图片请点赞关注收藏后评论区留言私信~~~ Local Binary Pattern Histofram简称LBPH,即局部二进制模式直方图,这是一种基于局部二进制模式算法,这种算法善于捕获局 ...
- OpenCV中使用Eigenfaces人脸识别器识别人脸实战(附Python源码)
需要源码和图片请点赞关注收藏后评论区留言私信~~~ Opencv提供了三种人脸识别方法,分别是Eigenfaces,Fisherfaces,LBPH这三种放噶都是通过对比样本最终实现人脸识别,因为这三 ...
- 人脸检测之MTCNN算法:论文阅读及源码解析
文章目录 前言 一.MTCNN论文阅读 1.1 论文信息 1.2 论文摘要翻译 1.3 论文核心(三级级联网络) 1.4 论文核心(级联子网络结构) 1.5 损失函数 二.源码解析 2.1 三级级联网 ...
- OpenCV中Fisherfaces人脸识别器识别人脸实战(附Python源码)
需要源码和图片请点赞关注收藏后评论区留言私信~~~ Fisherfaces是由Ronald Fisher最早提出的,这也是它名字的又来,它基于LDA线性判别分析技术,该方法将人脸数据转换到另外一个空间 ...
最新文章
- 不学51直接学stm32可以吗?学stm32需要哪些基础?
- bootstrapTable语言包设置
- ASP.Net面向对象思想
- ubuntu---php脚本中执行换行
- Codeforces Round #441 Div. 2题解
- windows结束线程的三种方式
- python调用什么函数实现对文件内容的读取_Python 文件读取函数 read(), readline(), readlines()...
- Redis的Linux单机版安装
- Neither the JAVA_HOME nor the JRE_HOME environment variable is defined 完美解决(tomcat error)
- Jmeter BeanShell使用json.jar包处理Json数据
- ubuntu终端一次多条命令方法和区别
- 关于360笔试部分题目小结
- 达观杯文本智能处理(6)
- macOS 安装 Win11 常见问题及解决方案
- [OpenCV+VS2015]火焰检测算法(HSI判据)
- 推荐一个工具:Dukto 免费快速实现局域网跨平台文件传输
- 保龄球计分程序java_保龄球计分——java代码实现
- 王煜全:AI独角兽必须进行业务升级 否则必死无疑
- 苹果手机使用技巧篇:教你完美使用好苹果手机的5个方法
- 华润置地php面试题_华润置地有限公司面试攻略,面试题,面试技巧及流程(附笔试,评论,薪资)-金针菇企评网...
热门文章
- Unity—Lerp插值函数
- 研究者们公布图像识别软件方面的最新进展
- Buzz 多用途 WordPress主题[v1.10]
- Python imp的代替
- 什么专业可以免考计算机二级,关于自考免考:2020年计算机二级证书可以免考哪些科目?...
- Video标签上面覆盖播放按钮点击播放
- 一场最长的演讲,AWS CEO Andy Jassy终于把“重塑”这件事说清楚了
- 【HNOI2004】宠物收养所
- Jodconverter-最新无码爽具,你值得拥有!
- 【RGB和RGBA之间的转换】也许对你有用