admin管理员组文章数量:1568303
- 💂 个人网站:【 海拥】【小霸王游戏机】
- 🤟 风趣幽默的前端学习课程:👉28个案例趣学前端
- 💅 想寻找共同学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】
- 💬 免费且实用的计算机相关知识题库:👉进来逛逛
给大家安利一个免费且实用的前端刷题(面经大全)网站,👉点击跳转到网站。
在本文中,我们将了解如何使用 OpenCV 和 Python 模糊和匿名化人脸。
为此,我们将使用级联分类器来检测人脸。确保从这个链接下载相同的xml文件:
https://drive.google/file/d/1PPO2MCttsmSqyB-vKh5C7SumwFKuhgyj/view
方法
- 首先,我们使用内置的人脸检测算法,从实时视频或图像中检测人脸。在这里,我们将使用级联分类器方法从实时视频(使用网络摄像头)中检测人脸。
- 然后,读取来自实时视频的帧。存储最新的帧并转换为灰度,以更好地理解特征。
- 接着,为了使输出美观,我们将在检测到的人脸周围制作一个彩色边框矩形。但是,我们希望检测到的人脸是模糊的,所以我们使用中值模糊函数来做同样的事情,并提到应该模糊人脸的区域。
- 最后,我们想要显示模糊的脸,使用 imshow 函数读取的帧,我们希望它被显示,直到我们按下一个键。
分步实施:
步骤 1: 导入人脸检测算法,称为级联分类器。
import cv2
# 检测人脸
cascade = cv2.CascadeClassifier("haarcascade_frontalface_default.xml")
步骤 2: 从视频中捕获帧,以便从帧中检测人脸
video_capture = cv2.VideoCapture(0)
while True:
# 从视频中捕获最新的帧
check, frame = video_capture.read()
步骤 3: 将捕获的帧更改为灰度。
# 将帧转换为灰度(黑白阴影)
gray_image = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
face = cascade.detectMultiScale(gray_image,
scaleFactor=2.0,
minNeighbors=4)
步骤 4: 在检测到的人脸周围绘制一个彩色矩形。
for x, y, w, h in face:
# 在检测到的人脸周围绘制边框
# (此处边框颜色为绿色,粗细为3)
image = cv2.rectangle(frame, (x, y),
(x+w, y+h),
(0, 255, 0), 3)
步骤 5: 模糊矩形内的部分(包含检测到的人脸)。
# 模糊矩形中的人脸
image[y:y+h, x:x+w] = cv2.medianBlur(image[y:y+h, x:x+w], 35)
步骤 6: 显示最终输出,即检测到的人脸(矩形内)是模糊的。
# 在视频中显示模糊的脸
cv2.imshow('face blurred', frame)
key = cv2.waitKey(1)
下面是完整的实现:
import cv2
# 检测人脸
cascade = cv2.CascadeClassifier("haarcascade_frontalface_default.xml")
# VideoCapture 是一个函数,用于捕获来自连接到系统的摄像头的视频
# 你可以传递 0 或 1
# 0 用于笔记本电脑网络摄像头
# 1 用于外部网络摄像头
video_capture = cv2.VideoCapture(0)
# 一个while循环运行无限次,为视频捕获无限数量的帧,因为视频是帧的组合
while True:
# 从视频中捕获最新的帧
check, frame = video_capture.read()
# 将帧转换为灰度(黑白阴影)
gray_image = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# 在捕获的帧中检测多个人脸
# scaleFactor:参数指定在每个图像比例下图像尺寸减小多少。
# minNeighbors: 参数指定每个矩形应该有多少个邻居来保留它。
# 矩形包含检测对象。
# 这里的对象是人脸。
face = cascade.detectMultiScale(
gray_image, scaleFactor=2.0, minNeighbors=4)
for x, y, w, h in face:
# 在检测到的人脸周围绘制边框。
#(这里边框颜色为绿色,粗细为3)
image = cv2.rectangle(frame, (x, y), (x+w, y+h),
(0, 255, 0), 3)
# 模糊矩形中的人脸
image[y:y+h, x:x+w] = cv2.medianBlur(image[y:y+h, x:x+w],
35)
# 在视频中显示模糊的脸
cv2.imshow('face blurred', frame)
key = cv2.waitKey(1)
# 该语句每帧仅运行一次。
# 基本上,如果我们得到一个密钥,而那个密钥是一个 q
if key == ord('q'):
break
# 我们将暂停退出 while 循环,
# 然后运行:
video_capture.release()
cv2.destroyAllWindows()
输出:
⭐️ 好书推荐
《元宇宙:图说元宇宙、设计元宇宙(全两册)》
【内容简介】
元宇宙到底有多火?前有林俊杰在元宇宙上买房,后有张碧晨新歌《Interstellar》也与星际银河有关,但是,你对元宇宙的概念知道多少呢?是不是也对这个名词熟之又熟,却对其内涵迷迷糊糊?
北京大学出版社联合文津图书奖得主、全国十大科普教育平台“量子学派”与中国科学院院士,共同推出《元宇宙:图说元宇宙、设计元宇宙(全两册)》一书,拒绝概念堆砌及材料汇编,原创首发,助你从零开始读懂元宇宙,并不断向上跃迁,轻松成为元宇宙架构师!
320幅手绘插图+场景化叙事+十一维元宇宙关系图谱,更有大拉页版“2140世界设定”,让元宇宙的世界清晰可见。
📚 当当自营购买链接:《元宇宙:图说元宇宙、设计元宇宙(全两册)》- 当当图书
版权声明:本文标题:使用 OpenCV 和 Python 模糊和匿名化人脸 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dianzi/1726344331a1066588.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论