天天看点

OpenCV/Python3 简易人脸检测

OpenCV/Python3 简易人脸检测

推荐使用Jupyter Notebook

  1. 引入库文件
import cv2
import matplotlib.pyplot as plt
import numpy as np
           
  1. 定义辅助函数(读取图像函数,显示图像函数)
"""
# 显示图像
# image   要显示的图像 
"""
def showImg(image):
    plt.imshow(image)
    plt.show()

"""
# 读取图像并转换通道
# image 要读取的图像的路径
"""
def readImg(image):
    image = cv2.imread(image)
    image = cv2.cvtColor(image,cv2.COLOR_BGR2RGB)
    return image
           
  1. 主要函数(人脸检测函数)
"""
# 人脸检测
# image 需要检测的图像
"""
def faceDetection(image):
    image = readImg(image)
    showImg(image)
    
    # 级联分类器(文尾下载)
    detector = cv2.CascadeClassifier("haarcascade_frontalface_default.xml")

    '''
    # 探测器
    # 参数说明:
    # image            传入的图像
    # scaleFactor=1.1  每次缩小图像的比例,默认是1.1
    # minNeighbors=3   匹配成功所需要的周围矩形框的数目
                       每一个特征匹配到的区域都是一个矩形框,只有多个矩形框同时存在的时候,才认为是匹配成功,默认值是3。  
    # minSize=(10,10)  匹配人脸的最小范围 
    # flags=2
        cv2.CASCADE_DO_CANNY_PRUNING = 1     利用canny边缘检测来排除一些边缘很少或者很多的图像区域
        cv2.CASCADE_SCALE_IMAGE = 2          正常比例检测
        cv2.CASCADE_FIND_BIGGEST_OBJECT = 4  只检测最大的物体
        cv2.CASCADE_DO_ROUGH_SEARCH = 8      粗略的检测
    '''
    rects = detector.detectMultiScale(image, scaleFactor=1.1, minNeighbors=3, minSize=(10,10), flags=2)
   
    '''
    # 画出矩形
    # image              需要画框的图像
    # (x,y)              启始坐标(左上角)
    # (x+width,y+height) 结束坐标(左下角)
    # (0,255,0)          矩形框颜色(绿色)
    # 5                  矩形框宽度
    '''
    for(x,y,width,height) in rects:
        cv2.rectangle(image,(x,y),(x+width,y+height),(0,255,0),5)

    showImg(image)
           
  1. 循环传入测试图像获得结果
for i in range(4):
    print('test' + str(i) + '.jpeg')
    faceDetection('test' + str(i) + '.jpeg')
           
  1. 级联分类器下载地址

    链接:https://pan.baidu.com/s/1xQd4Tdu24fZ3MEEEM62f4w 密码:vnq7

推荐使用Jupyter Notebook