模糊视频或图像的特定部分是一项非常常见的任务,具有多种用例。
本文我们将专注于模糊人脸,但为了做到这一点,我们首先必须检测这些人脸。
你可能还记得,在之前的文章中,我们已经讨论了如何检测图像中的人脸,我们将在此处使用该代码的一部分。
阅读之前的文章:https://medium.com/artificialis/build-a-security-camera-with-python-and-opencv-83e69f676216

入门

首先,安装所需的包:
pip install opencv-python

现在,打开一个新文件并导入它们。
import
 cv2

最后,让我们定义一些变量供以后使用
image = cv2.imread(
'image.jpg'
)


h, w = image.shape[:
2
]


kernel_width = (w//
7
) | 
1
kernel_height = (h//
7
) | 
1

face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 
'haarcascade_frontalface_default.xml'
)

加载一个图像并定义它的宽度和高度。然后,我们定义内核宽度和高度(我们将使用高斯模糊,其内核取决于图像的高度和宽度)。
在最后一行,我们正在加载 Cascade 分类器,就像上面链接的教程一样。

检测人脸并对其进行模糊处理

为了检测人脸,我们将图像提供给上面定义的级联分类器,然后我们将遍历每个检测到的人脸以应用高斯模糊。
faces = face_cascade.detectMultiScale(image, 
1.1
5
)


for
 x, y, w, h 
in
 faces:

    face_roi = image[y:y+h, x:x+w]

    blurred_face = cv2.GaussianBlur(face_roi, (kernel_width, kernel_height), 
0
)

    image[y:y+h, x:x+w] = blurred_face


cv2.imshow(
'image'
, image)

cv2.waitKey(
0
)

cv2.destroyAllWindows()

与安全摄像头教程中我们在检测到的人脸周围绘制边界框不同,我们现在循环检测并且只模糊检测到的人脸。
cv2.GaussianBlur() 方法使用高斯滤波器模糊图像,将中值应用于内核大小内的中心像素。它接受输入图像作为第一个参数,高斯核大小作为第二个参数中的元组,以及 sigma 参数作为第三个参数。
关于内核大小,文档说它必须是奇数和正整数,我已将原始图像除以 7,因此它取决于图像形状并执行按位或以确保结果值为奇数。
当然,你可以设置自己的内核大小,它越大,图像越模糊。
结果就是这样!

结论

你学习了如何模糊图像或视频中检测到的每个人脸。
现在,你可以通过尝试平滑角度来获得一些乐趣,以获得椭圆形的模糊形状,从而获得更准确的图像。
☆ END ☆
如果看到这里,说明你喜欢这篇文章,请转发、点赞。微信搜索「uncle_pn」,欢迎添加小编微信「 woshicver」,每日朋友圈更新一篇高质量博文
扫描二维码添加小编↓
继续阅读
阅读原文