下列代码,识别图片中的人脸,并裁剪人脸,将图片转化成固定大小,再按照自己的后缀名存储起来
bug:我是用来识别单张图片中只有一个人脸的数据集,如果用来处理一张图片中的多个人脸,那么图片的命名可能会有bug
import cv2
import os
import glob
#最后剪裁的图片大小
size_m = 48
size_n = 48
def detect(img, cascade):
rects = cascade.detectMultiScale(img, scaleFactor=1.3, minNeighbors=4, minSize=(30, 30),flags=cv2.CASCADE_SCALE_IMAGE)
if len(rects) == 0:
return []
rects[:, 2:] += rects[:, :2]
return rects
cascade = cv2.CascadeClassifier("cascades\\haarcascade_frontalface_alt2.xml")
imglist=glob.glob("data/image/jaffe/*")
for list in imglist:
#print(list)
# cv2读取图像
img = cv2.imread(list)
dst=img
rects=detect(dst,cascade)
for x1,y1,x2,y2 in rects:
#调整人脸截取的大小。横向为x,纵向为y
roi = dst[y1+10 :y2+20, x1+10 :x2 ]
img_roi = roi
re_roi = cv2.resize(img_roi, (size_m, size_n))
#新的图像存到data/image/jaffe_1
f = "{}/{}".format("data/image", "jaffe_1")
#print(f)
if not os.path.exists(f):
os.mkdir(f)
#切割图像路径
path=list.split(".")
#新的图像存到data/image/jaffe_1 并以jpg 为后缀名
cv2.imwrite("{}/{}_{}.jpg".format(f,path[1],path[2]), re_roi)