OpenCV 是一个流行的开源计算机视觉库,可用于执行各种图像和视频处理任务。OpenCV 的常见用例之一是人脸检测和识别,通常用于监控系统、安全摄像头和生物识别身份验证等应用。然而,在某些情况下,可能有必要通过模糊脸部来保护图像或视频中捕获的个人的隐私。这可以通过 OpenCV 使用像素化、高斯模糊或中值模糊等各种技术轻松完成。在本次回应中,我们将重点讨论如何使用 OpenCV 对图像中的人脸进行模糊处理,讨论所涉及的步骤以及可用于实现此目的的不同方法。
除了 OpenCV 之外,我们还将使用 Mediapipe,这是一种流行的框架,用于为各种感知任务(包括人脸检测和人脸标志识别)构建管道。Mediapipe 提供了一组预训练的模型,可用于快速检测图像或视频中的人脸,并提取准确模糊人脸所需的面部标志。通过结合使用 OpenCV 和 Mediapipe,我们可以实现图像中人脸模糊的有效且高效的解决方案。 现在我们已经介绍了使用 OpenCV 模糊脸部的概念,让我们看看如何使用代码来完成此操作。在以下部分中,我们将提供有关如何使用 OpenCV 和 Python 在图像中实现人脸模糊的分步说明。那么,让我们深入了解一下吧! 首先导入库:
import cv2import mediapipe as mp
现在我们正在执行以下任务: 定义一个紫色元组,用于在检测到的脸部周围绘制边界框。 初始化 OpenCV VideoCapture 对象以从默认摄像头(索引为 0)捕获视频。 FaceDetection通过创建置信度阈值为 0.75 的对象来初始化 Mediapipe 人脸检测模块。我们还drawing_utils从 Mediapipe 导入模块,用于在检测到的人脸周围绘制边界框。
PURPLE = ( 255 , 0 , 255 )# 打开默认摄像头(0)进行视频采集cap = cv2.VideoCapture( 0 )# 初始化Mediapipe人脸检测模块mpFaceDetection = mp.solutions.face_detectionmpDraw =mp.solutions.drawing_utilsfaceDetection = mpFaceDetection.FaceDetection( 0.75 )
在这部分代码中,我们执行以下任务:
使用 启动无限循环以从视频源中捕获帧cap.read()。
将捕获的 BGR 图像转换为 RGB 格式以供 Mediapipe 使用。
使用 Mediapipe 对象处理 RGB 图像FaceDetection以检测图像中的人脸。
对于每个检测到的人脸,使用该函数在人脸周围绘制边界框cv2.rectangle()。
提取与脸部周围的边界框相对应的图像区域,使用该cv2.blur()函数对该区域应用模糊,并用图像的模糊版本替换该区域。
使用 来显示带有模糊脸部的结果图像cv2.imshow()。
while True :# 从相机中捕获一帧成功, img = cap.read()# 将图像从 BGR 颜色空间转换为 Lab 颜色空间imgRGB = cv2.cvtColor(img, cv2.COLOR_BGR2Lab)# 使用人脸检测模型检测图像中的人脸results =faceDetection.process(imgRGB)# 初始化边界框坐标bbox = ( 0 , 0 , 0 , 0 )# 如果图像中至少检测到一张人脸if results.detections:for id , detector inenumerate (results.detections):# 获取人脸的相对边界框bboxC = detector.location_data.relative_bounding_box# 计算绝对边界框坐标ih, iw, ic = img.shapebbox = int ((bboxC.xmin * iw )), int ((bboxC.ymin * ih)),int ((bboxC.width * iw)), int ((bboxC.height * ih))# 绘制脸部周围的边界框cv2.rectangle(img, bbox, PURPLE, 2 )# 模糊边界框内的图像部分# 在这里您还可以选择脸部模糊程度imgBlurPart = cv2.blur(img[bbox[ 1 ]:bbox[ 3 ] + bbox [ 1 ], bbox[ 0 ]:bbox[ 2 ] + bbox[ 0 ]], ( 19 , 19 ), 0 )# 用模糊图像替换边界框内的原始图像 img[bbox[ 1 ]:bbox[ 3 ] + bbox[ 1 ], bbox[ 0 ]:bbox[ 2 ] + bbox[ 0 ]] = imgBlurPart# 显示带有边界框的模糊图像cv2.imshow( "Blur" , img)# 等待按键cv2.waitKey( 1 )
恭喜您,您已成功学习如何使用 OpenCV 和 MediaPipe 实时模糊脸部!使用此代码,您现在可以轻松保护视频或图像中个人的隐私。在您自己的素材上尝试一下,不要忘记尝试不同的参数以达到所需的模糊程度。
646