模糊视频或图像的特定部分是一项非常常见的任务,具有多种用例。
本文我们将专注于模糊人脸,但为了做到这一点,我们首先必须检测这些人脸。
你可能还记得,在之前的文章中,我们已经讨论了如何检测图像中的人脸,我们将在此处使用该代码的一部分。
阅读之前的文章: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」,每日朋友圈更新一篇高质量博文。
↓扫描二维码添加小编↓