OpenCv人脸检测技术-(实现抖音特效-给人脸戴上墨镜)

科技资讯 投稿 4600 0 评论

OpenCv人脸检测技术-(实现抖音特效-给人脸戴上墨镜)

OpenCv人脸检测技术-(实现抖音特效-给人脸戴上墨镜

OpenCv相关函数说明

import cv2 # 导入OpenCv库
cv2.imread(filename # 读取图像
object = cv2.CascadeClassifier( # 括号里面填Haar级联分类器
"""
CascadeClassifier,是Opencv中做人脸检测的时候的一个级联分类器。并且既可以使用Haar,也可以使用LBP特征。Haar特征是一种反映图像的灰度变化的,像素分模块求差值的一种特征。
"""
object.detectMultiScale(image, scaleFactor, minNeighbors
"""
detectMultiScale是CascadeClassifier的子类;
image:待分析的图像。
scaleFactor:扫描图像时缩放的比例。
minNeighbors:保留多少检测结果,该值越大误差越小。
etc...
"""
cv2.waitKey(delay # 等待用户按下键盘后等待delay毫秒
cv2.destroyAllWindows( # 销毁所有窗口

分析人脸位置

人脸检测,把图像分成一个个小块,对每一个小块判断是否是人脸,假如一张图被分成了5000块,则速度非常慢。
为了提高效率,OpenCV 提供 cascades 来避免这种情况。提供了一系列的xml文件
cascades :翻译 :小瀑布 级联
cascade 对于每个数据块,它都进行一个简单快速的检测。若过,会再进行一个更仔细的检测。该算法有 30 到 50 个这样的阶段,或者说 cascade。只有通过全部阶段,cascade才会判断检测到人脸。这样做的好处是:大多数小块都会在前几步就产生否定反馈,节约时间。
资源链接,该资源不仅仅包括人脸xml,还有其他眼睛等。赚取点积分吧。
OpenCV人脸识别xml文件.zip或者从官网Sources里找资源,data文件夹中有是特征文件,我们一般选用haarcascade_frontalface_default.xml

import cv2
img = cv2.imread("/Users/duanhao/Desktop/photo/liukun.jpg"
# 加载识别人脸的级联分析器
faceCascade = cv2.CascadeClassifier("/Applications/anaconda/anaconda3/lib/python3.9/site-packages/cv2/data/haarcascade_frontalface_default.xml"
faces = faceCascade.detectMultiScale(img, 1.15, 5
for (x, y, w, h in faces:
    cv2.rectangle(img, (x, y, (x + w, y + h, (0, 0, 255, 5
cv2.imshow("image", img
cv2.waitKey(
cv2.destroyAllWindows(

给人脸戴上墨镜

准备阶段:我们可以读取视频,也可以读取人脸,这里我准备了一张含有人脸的照片;

VideoCapture类方法。

代码:

import cv2
def over_img(img, img_over, over_x, over_y:
    img_h, img_w, c = img.shape
    img_over_h, img_over_w, over_c = img_over.shape
    if over_c == 3:
        img_over = cv2.cvtColor(img_over, cv2.COLOR_BGR2BGRA
    for w in range(0, img_over_w:
        for h in range(0, img_over_h:
            # 透明像素不能覆盖图像
            if img_over[h, w, 3] != 0:
                for c in range(0, 3:
                    x = over_x + w
                    y = over_y + h
                    if x >= img_w or y >= img_h:
                        break
                    img[y, x, c] = img_over[h, w, c]
    return img

img = cv2.imread("/Users/duanhao/Desktop/photo/liukun.jpg"
glass = cv2.imread("/Users/duanhao/Desktop/photo/glass.png", cv2.IMREAD_UNCHANGED # 保留图像类型
height, weight, channel = glass.shape
# 加载人脸识别联结器
faceCascade = cv2.CascadeClassifier("/Applications/anaconda/anaconda3/lib/python3.9/site-packages/cv2/data/haarcascade_frontalface_default.xml"
face = faceCascade.detectMultiScale(img, 1.15, 4
for (x, y, w, h in face:
    gw = w
    gh = int(height * gw/weight
    img_over_new = cv2.resize(glass, (gw, gh
    img = over_img(img, img_over_new, x, y+int(h*1/3
    # cv2.rectangle(img, (x, y, (x + w, y + h, (0, 0, 255, 5
cv2.imshow("screen", img
cv2.waitKey(
cv2.destroyAllWindows(

效果图:

结束语:

最后,祝所有奋斗的人都能收获到好的结果。

编程笔记 » OpenCv人脸检测技术-(实现抖音特效-给人脸戴上墨镜)

赞同 (19) or 分享 (0)
游客 发表我的评论   换个身份
取消评论

表情
(0)个小伙伴在吐槽