• 6.python-opencv人脸检测


    6.python-opencv人脸检测

    第一章 python-opencv-图片导入和显示
    第二章 python-opencv图像简单处理
    第三章 python-opencv图像mask掩膜处理
    第四章 python-opencv图像马赛克
    第五章 python-opencv人脸马赛克



    前言

    本文主要介绍如何使用opencv加载级联器检测图像中的人脸,并将人脸用方框标注出来。
    本文将代码进行详细的标注说明。


    一、完整代码

    import cv2
    import numpy as np
    
    if __name__ == '__main__':
        img = cv2.imread('./tong.jpg')
        #加载人脸检测模型
        face_detector = cv2.CascadeClassifier('./haarcascade_frontalface_alt.xml')
        #检测出的人脸坐标 x,y,w,h
        # faces = face_detector.detectMultiScale(img)
        #调参增加检测精度
        faces = face_detector.detectMultiScale(img,
                                               scaleFactor=1.05,  #缩放每次检测范围,默认1.1
                                                minNeighbors=3)
        # print(faces)
    
        #绘制矩形检测框
        for x,y,w,h in faces:  # for循环可以进行数组遍历
            cv2.rectangle(img,
                          pt1=(x,y),
                          pt2=(x+w,y+h),
                          color=[0,0,255],
                          thickness=2)  #在检测到的人脸区域绘制矩形框
    
        #绘制圆形检测框
        # for x,y,w,h in faces:
        #     cv2.circle(img,
        #                center=(x+w//2, y+h//2),
        #                radius=w//2,  #半径
        #                color=[0,255,0],
        #                thickness=2)
    
        cv2.imshow('face', img)
        cv2.waitKey(0)
        cv2.destroyAllWindows()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    二、部分代码说明

    加载人脸加测模型

    人脸检测模型可以直接从opencv官方网站中下载(下载地址),下载后是一个xml文件,通过加载xml文件即可进行检测。

    模型加载用到的函数为cv2.CascadeClassifier(),其中括号中直接填入你下载好的检测模型的路径。

    face_detector = cv2.CascadeClassifier('./haarcascade_frontalface_alt.xml')
    
    • 1

    人脸检测

    模型加载后便开始人脸检测,人脸检测用到的是detectMultiScale函数。

    detectMultiScale函数可以检测出图片中所有的人脸,并将人脸用vector保存各个人脸的坐标、大小(用矩形表示)

    在这里插入图片描述
    detectMultiScale函数的定义为:

    detectMultiScale(self, image, scaleFactor=None, minNeighbors=None, flags=None, minSize=None, maxSize=None)
    
    • 1

    各参数含义为:

    image--待检测图片,一般为灰度图像加快检测速度;
    
    objects--被检测物体的矩形框向量组;
    
    scaleFactor--表示在前后两次相继的扫描中,搜索窗口的比例系数。默认为1.1即每次搜索窗口依次扩大10%;
    
    minNeighbors--表示构成检测目标的相邻矩形的最小个数(默认为3)。
            如果组成检测目标的小矩形的个数和小于 min_neighbors - 1 都会被排除。
            如果min_neighbors 为 0, 则函数不做任何操作就返回所有的被检候选矩形框,
            这种设定值一般用在用户自定义对检测结果的组合程序上;
    
    flags--要么使用默认值,要么使用CV_HAAR_DO_CANNY_PRUNING,如果设置为
    
            CV_HAAR_DO_CANNY_PRUNING,那么函数将会使用Canny边缘检测来排除边缘过多或过少的区域,
    
            因此这些区域通常不会是人脸所在区域;
    
    minSize和maxSize用来限制得到的目标区域的范围。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    检测代码:

    faces = face_detector.detectMultiScale(img,
                                           scaleFactor=1.05,  #缩放每次检测范围,默认1.1
                                           minNeighbors=3)
    
    • 1
    • 2
    • 3

    绘制检测框

    人脸测结果输出的是人脸区域相对于图像的左上角坐标(x,y)和宽度w、高度h,可以根据这些信息绘制标注框。

    for x,y,w,h in faces:  # for循环可以进行数组遍历
            cv2.rectangle(img,
                          pt1=(x,y),
                          pt2=(x+w,y+h),
                          color=[0,0,255],
                          thickness=2)  #在检测到的人脸区域绘制矩形框
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    用for循环遍历所有检测到的人脸信息,然后从左上角(x,y)到右下角(x+w,y+h)绘制矩形框,颜色[0,0,255]表示红色,thickness=2未标注框线的粗细程度。


    结果展示

    在这里插入图片描述

    在这里插入图片描述

  • 相关阅读:
    PostgreSQL数据库
    buuctf web [极客大挑战 2019]Http
    Leetcode 284. Peeking Iterator (Iterator设计题)
    Linux:非常实用的Linux命令
    JavaScript:实现 jugglerSequence杂耍者序列算法 (附完整源码)
    几种取时间的方法(附代码)
    Linux故障排查思路
    质量管理计划创建的负责人以及4大步骤
    AI从入门到精通,什么是LLMs大型语言模型?
    计算机毕业设计Java婚纱摄影网站(源码+系统+mysql数据库+lw文档)
  • 原文地址:https://blog.csdn.net/weixin_45848575/article/details/125344503