将需要提取的图片放在第一个文件夹中
将需要生成的图片放在第二个文件夹中
调整好路径,直接运行即可
import cv2
import os
if __name__ == '__main__':
# print('catching your face and writting into disk...')
# read_directory("0/",100,"1/")
# read_directory('getTrainData', 0, 'C:/Users/Administrator/Desktop/x/no6/lufei2/X', 100)
# getTrainData('getTrainData', 0, './face_dataset/1/', 10)
directory_name=r"D:\pyproject\project1\BASfigure\1"
path_name=r"D:\pyproject\project1\BASfigure\0\0"
max_num=10
num = 0#记录图片数量
for filename in os.listdir(directory_name):
# print(filename) # 仅仅是为了测试
img = cv2.imread(directory_name + "/" + filename)
#####显示图片#######
# print(img)
# cv2.imshow(filename, img)
cap = cv2.imread(directory_name)
classifier = cv2.CascadeClassifier('haarcascade_frontalface_alt2.xml')
color = (0, 255, 0)
grey = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 灰度化
faceRects = classifier.detectMultiScale(grey, scaleFactor=1.2, minNeighbors=3, minSize=(32, 32))
# faceRects = cv2.re
# print(faceRects)
# print(len(faceRects))
if len(faceRects)>0:
for faceRect in faceRects:
x, y, w, h = faceRect
image_name = '%s%d.jpg' % (path_name, num) # 这里为每个捕捉到的图片进行命名,每个图片按数字递增命名。
image = img[y:y + h, x:x + w] # 将当前帧含人脸部分保存为图片
image=cv2.resize(image,(128,128),interpolation = cv2.INTER_AREA)
# image_name2=(path_name + "/" +image_name)
# print(image_name)
# print(image)
cv2.imwrite(image_name, image)
# print(image_name)
# print(image)
num += 1
print(num)
# if num > max_num: # 如果超过指定最大保存数量退出循环
# break
# cv2.rectangle(img, (x, y), (x + w, y + h), color, 2) # 画出矩形框
# font = cv2.FONT_HERSHEY_SIMPLEX # 获取内置字体
# cv2.putText(img, ('%d' % num), (x + 30, y + 30), font, 1, (255, 0, 255),
# 4) # 调用函数,对人脸坐标位置,添加一个(x+30,y+30)的矩形框用于显示当前捕捉到了多少人脸图片
#
# # cv2.rectangle(img, (x, y), (x + w, y + h), color, 2) # 画出矩形框
# if num>max_num:
# break
#
# # cv2.imshow(filename, img)
# c=cv2.waitKey(10)
# if c & 0xFF == ord('q'):
# break
# cv2.destroyAllWindows()