如何使用 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()** 函数中使用的第二个和第三个参数。