如何使用OpenCV Python模糊图像中的人脸?

如何使用OpenCV Python模糊图像中的人脸?

为了让图像中的人脸模糊,我们首先使用haar级联分类器检测人脸。OpenCV提供了不同类型的已训练好的haarcascade来进行对象检测。我们使用 haarcascade_frontalface_alt.xml 作为haar级联xml文件。为了模糊人脸区域,我们应用 cv2.GaussianBlur()

如何下载Haarcascade?

可以在GitHub网站( https://github.com/opencv/opencv/tree/master/data/haarcascades )找到不同的haarcascade级联。要下载用于人脸检测的 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 cascade XML files”放在正确的文件夹中非常重要。在这里,我们将XML文件放在名为“haarcascades”的文件夹中。

示例

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

# 导入所需库
import cv2

# 读取输入图像
image = cv2.imread('man3.jpg')

# 定义人脸检测用的haar级联分类器
face_cascade =
cv2.CascadeClassifier('haarcascades/haarcascade_frontalface_alt.xml')
faces = face_cascade.detectMultiScale(image, 1.3, 5)
print("图像中检测到的人脸数目:", len(faces))

# 针对图像中检测到的所有人脸进行循环处理
for (x, y, w, h) in faces:
   roi = image[y:y+h, x:x+w]

   # 对人脸矩形应用高斯模糊
   roi = cv2.GaussianBlur(roi, (17, 17), 30)

   # 添加高斯模糊的人脸到原始图像,获得最终图像
   image[y:y+roi.shape[0], x:x+roi.shape[1]] = roi

# 显示输出结果
cv2.imshow('模糊人脸', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

输入图像

将下面的图像视为上述示例中使用的输入图像 ‘ man3.jpg ‘。

如何使用OpenCV Python模糊图像中的人脸?

输出结果

执行后,将产生以下输出: 输出结果

图像中检测到的人脸数目: 1

然后我们得到以下窗口,在图像中显示模糊的人脸-

如何使用OpenCV Python模糊图像中的人脸?

示例

以下Python程序演示了如何模糊输入图像中的人脸。

# 导入所需的库
import cv2

# 读取输入图像
image = cv2.imread('faces.jpg')

# 定义用于检测面部的haar级联
face_cascade =
cv2.CascadeClassifier('haarcascades/haarcascade_frontalface_alt.xml')
faces = face_cascade.detectMultiScale(image, 1.1, 2)
print("在图像中检测到的面部:", len(faces))

# 循环遍历图像中检测到的所有面部
for (x, y, w, h) in faces:
   roi = image[y:y+h, x:x+w]

   # 对面部矩形应用高斯模糊
   roi = cv2.GaussianBlur(roi, (15, 15), 30)

   # 在原始图像上添加模糊面部以获取最终图像
   image[y:y+roi.shape[0], x:x+roi.shape[1]] = roi

# 显示输出
cv2.imshow('Blur Face', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

输入图像

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

如何使用OpenCV Python模糊图像中的人脸?

执行后,会产生以下 输出

在图像中检测到的面部:15

然后,我们得到以下显示输入图像中模糊面部的窗口请注意,所有15个面部的大小都不同。所有不同的脸部都已被模糊。

如何使用OpenCV Python模糊图像中的人脸?

然后,我们得到以下显示输入图像中模糊面部的窗口请注意,所有15个面部的大小都不同。所有不同的脸部都已被模糊。

注意 − 为了更好的面部检测,请调整detectMultiScale()函数使用的第二个和第三个参数。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

Python OpenCV