如何使用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 ‘。
输出结果
执行后,将产生以下输出: 输出结果 −
图像中检测到的人脸数目: 1
然后我们得到以下窗口,在图像中显示模糊的人脸-
示例
以下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()
输入图像
我们将使用以下图像作为该程序的输入文件−
执行后,会产生以下 输出 :
在图像中检测到的面部:15
然后,我们得到以下显示输入图像中模糊面部的窗口请注意,所有15个面部的大小都不同。所有不同的脸部都已被模糊。
然后,我们得到以下显示输入图像中模糊面部的窗口请注意,所有15个面部的大小都不同。所有不同的脸部都已被模糊。
注意 − 为了更好的面部检测,请调整detectMultiScale()函数使用的第二个和第三个参数。