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)
网友评论