6.python-opencv人脸检测

6.python-opencv人脸检测

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


文章目录

  • 6.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()

二、部分代码说明

加载人脸加测模型

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

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

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

人脸检测

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

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

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

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

各参数含义为:

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用来限制得到的目标区域的范围。

检测代码:

faces = face_detector.detectMultiScale(img,
                                       scaleFactor=1.05,  #缩放每次检测范围,默认1.1
                                       minNeighbors=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)  #在检测到的人脸区域绘制矩形框

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


结果展示

6.python-opencv人脸检测_第1张图片

你可能感兴趣的:(python-opencv,opencv,python,计算机视觉)