下列代碼,識別圖片中的人臉,並裁剪人臉,將圖片轉化成固定大小,再按照自己的后綴名存儲起來
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)
原文:https://blog.csdn.net/SHAOYEZUIZUISHAUI/article/details/103301229
-