OpenCV实战:模糊滤镜

一、项目介绍

利用OpenCV,快速实现人脸模糊滤镜处理。效果如下:

 二、实验

该项目非常简单,代码量也不超过30行,具体步骤如下:

(1)安装环境

pip install opencv-python
pip install cvzone==1.5.6
pip install mediapipe==0.8.3.1

(2)加载视频

import cv2

cap = cv2.VideoCapture(0)
# 设置视频宽、高
cap.set(3, 640)
cap.set(4, 480)

while True:
    success, img = cap.read()
    cv2.imshow("Images", img)
    cv2.waitKey(1)

(3)捕捉人脸

import cv2
from cvzone.FaceDetectionModule import FaceDetector  # 人脸检测模块

cap = cv2.VideoCapture(0)
# 设置视频宽、高
cap.set(3, 640)
cap.set(4, 480)
detector = FaceDetector(minDetectionCon=0.75)  # 创建人脸检测器detector

while True:
    success, img = cap.read()
    img, bboxs = detector.findFaces(img, draw=True)
    cv2.imshow("Images", img)
    cv2.waitKey(1)

效果:

(4)裁剪人脸

import cv2
from cvzone.FaceDetectionModule import FaceDetector  # 人脸检测模块

cap = cv2.VideoCapture(0)
# 设置视频宽、高
cap.set(3, 640)
cap.set(4, 480)
detector = FaceDetector(minDetectionCon=0.75)  # 创建人脸检测器detector

while True:
    success, img = cap.read()
    img, bboxs = detector.findFaces(img, draw=True)
    # bboxs包含人脸框的中心点(x,y)和宽高w、h等信息
    if bboxs:
        # 遍历
        for i, bbox in enumerate(bboxs):
            x, y, w, h = bbox['bbox']
            imgCrop = img[y:y + h, x:x + w]  # 裁剪人脸(即移动人脸框部分)
            cv2.imshow(f'Image Cropped{i}', imgCrop)
    cv2.imshow("Images", img)
    cv2.waitKey(1)

效果:

 (5)滤镜处理

主要运用到了'cv2.blur()'函数,该函数用于对图像进行均值模糊处理。其原理是,将图像中的每一个像素与其周围像素的平均值进行替换,来实现模糊效果。

import cv2
from cvzone.FaceDetectionModule import FaceDetector  # 人脸检测模块

cap = cv2.VideoCapture(0)
# 设置视频宽、高
cap.set(3, 640)
cap.set(4, 480)
detector = FaceDetector(minDetectionCon=0.75)  # 创建人脸检测器detector

while True:
    success, img = cap.read()
    img, bboxs = detector.findFaces(img, draw=True)
    # bboxs包含人脸框的中心点(x,y)和宽高w、h等信息
    if bboxs:
        # 遍历
        for i, bbox in enumerate(bboxs):
            x, y, w, h = bbox['bbox']
            # 防止人脸移动出摄像头范围
            if x < 0: x = 0
            if y < 0: y = 0
            imgCrop = img[y:y + h, x:x + w]  # 裁剪人脸(即移动人脸框部分)
            # cv2.imshow(f'Image Cropped{i}', imgCrop)
            imgBlur = cv2.blur(imgCrop, (35, 35))  # (35,35):核大小,表示模糊程度
            img[y:y + h, x:x + w] = imgBlur  # 人脸部分模糊替换

    cv2.imshow("Images", img)
    cv2.waitKey(1)

效果如下:

OpenCV人脸模糊滤镜处理

三、最后

希望我们一直在正确的道路上前行,慢点也没关系。以后,文章可能两周一更了。生活所迫,也为了充实自己,up周末找了份兼职。时光荏苒,岁月如梭,素什锦年,稍纵即逝,半载青春年华,似沙漏般,弹指间,流在昨天。

猜你喜欢

转载自blog.csdn.net/weixin_44686138/article/details/131034619