如何使用OpenCV Python在图像中模糊人脸
要在图像中模糊人脸,首先我们使用haar级联分类器检测人脸。OpenCV为我们提供了不同类型的训练好的haar级联用于目标检测。我们使用 haarcascade_frontalface_alt.xml 作为haar级联的xml文件。为了模糊人脸区域,我们应用 cv2.GaussianBlur() 。
如何下载Haarcascade
您可以在GitHub网址上找到不同的haarcascades – 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() 函数中使用的第二个和第三个参数。