如何使用 OpenCV Python 模糊图像中的面部?


为了模糊图像中的面部,我们首先使用 Haar 级联分类器检测面部。OpenCV 为我们提供了用于对象检测的不同类型的训练好的 Haar 级联。我们使用 **haarcascade_frontalface_alt.xml** 作为 Haar 级联 xml 文件。为了模糊面部区域,我们应用 **cv2.GaussianBlur()**。

如何下载 Haar 级联?

您可以在以下 GitHub 网站地址找到不同的 Haar 级联:

https://github.com/opencv/opencv/tree/master/data/haarcascades

要下载用于人脸检测的 **haarcascade**,请点击 **haarcascade_frontalface_alt.xml** 文件。以原始格式打开它,右键单击并保存。

步骤

您可以按照以下步骤模糊图像中的面部:

  • 导入所需的库。在以下所有示例中,所需的 Python 库是 **OpenCV**。确保您已安装它。

  • 使用 **cv2.imread()** 读取输入图像。指定完整的图像路径。

  • 初始化一个用于人脸检测的 Haar 级联分类器,例如 **face_cascade = cv2.CascadeClassifier()**。提供 Haar 级联 xml 文件的完整路径。您可以使用 **haarcascade_frontalface_alt.xml** 来检测图像中的人脸。

  • 使用 **face_cascade.detectMultiScale()** 检测输入图像中的人脸。它以 **(x,y,w,h)** 格式返回检测到的人脸的坐标。

  • 对于检测到的人脸,定义 **roi** 为 **image[y:y+h, x:x+w]**,并对 roi 应用高斯模糊。将模糊后的面部添加到原始图像以获得最终图像。

  • 打印带有模糊面部的图像。

让我们看一些示例,以便更好地理解。

**注意**:您必须将“Haar 级联 XML 文件”放在正确的文件夹中。在这里,我们将 XML 文件放在名为“haarcascades”的文件夹中。

示例

在此示例中,我们将模糊输入图像中检测到的人脸。

# import required libraries import cv2 # Read the input image image = cv2.imread('man3.jpg') # define haar cascade for face detection face_cascade = cv2.CascadeClassifier('haarcascades/haarcascade_frontalface_alt.xml') faces = face_cascade.detectMultiScale(image, 1.3, 5) print("Face detected in the image:", len(faces)) # Loop over all the detected faces in the image for (x, y, w, h) in faces: roi = image[y:y+h, x:x+w] # apply gaussian blur to face rectangle roi = cv2.GaussianBlur(roi, (17, 17), 30) # add blurred face on original image to get final image image[y:y+roi.shape[0], x:x+roi.shape[1]] = roi # Display the output cv2.imshow('Blur Face', image) cv2.waitKey(0) cv2.destroyAllWindows()

输入图像

将以下图像视为上述示例中使用的输入图像“**man3.jpg**”。


输出

执行后,它将产生以下 **输出**:

Face detected in the image: 1

并且我们将获得以下窗口,显示图像中模糊的面部:


示例

下面的 Python 程序演示了如何在输入图像中模糊面部。

# import required libraries import cv2 # Read the input image image = cv2.imread('faces.jpg') # define haar cascade for face detection face_cascade = cv2.CascadeClassifier('haarcascades/haarcascade_frontalface_alt.xml') faces = face_cascade.detectMultiScale(image, 1.1, 2) print("Face detected in the image:", len(faces)) # Loop over all the detected faces in the image for (x, y, w, h) in faces: roi = image[y:y+h, x:x+w] # apply gaussian blur to face rectangle roi = cv2.GaussianBlur(roi, (15, 15), 30) # add blurred face on original image to get final image image[y:y+roi.shape[0], x:x+roi.shape[1]] = roi # Display the output cv2.imshow('Blur Face', image) cv2.waitKey(0) cv2.destroyAllWindows()

输入图像

我们将使用以下图像作为此程序的输入文件:


执行后,它将产生以下 **输出**

Face detected in the image: 15

并且我们将获得以下窗口,显示输入图像中模糊的面部。请注意,所有 15 张面部大小都不同。所有不同的面部都已模糊。


并且我们将获得以下窗口,显示输入图像中模糊的面部。请注意,所有 15 张面部大小都不同。所有不同的面部都已模糊。

**注意** - 为了获得更好的面部检测效果,请调整 **detectMultiScale()** 函数中使用的第二个和第三个参数。

更新于: 2022-12-05

2K+ 阅读量

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告