利用Haar滤波器进行人脸检测

from PIL import Image, ImageDraw
import numpy
import imageio
import cv2
import os

def detectFaces(image_name):
    img = cv2.imread(image_name)
    face_cascade = cv2.CascadeClassifier("/usr/share/opencv/haarcascades/haarcascade_frontalface_default.xml")
    if img.ndim == 3:
        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    else:
        gray = img #if语句:如果img维度为3,说明不是灰度图,先转化为灰度图gray,如果不为3,也就是2,原图就是灰度图

    faces = face_cascade.detectMultiScale(gray, 1.2, 5)#1.3和5是特征的最小、最大检测窗口,它改变检测结果也会改变
    result = []
    for (x,y,width,height) in faces:
        result.append((x,y,x+width,y+height))
    return result

def drawFaces(image_path):
    faces = detectFaces(image_path)
    image_name = os.path.basename(image_path)
    dir_name = os.path.dirname(image_path)
    save_name = (os.path.splitext(image_name)[0]+'_face'+os.path.splitext(image_name)[1])
    save_path = join(dir_name,save_name)
    if faces:
        img = Image.open(image_path)
        draw_instance = ImageDraw.Draw(img)
        for (x1,y1,x2,y2) in faces:
            draw_instance.rectangle((x1,y1,x2,y2), outline=(255, 0,0))
        img.save(save_path)

你可能感兴趣的:(利用Haar滤波器进行人脸检测)