我使用以下代码使用Haar级联分类器捕获人脸,但仍然无法获得完整的头像
from imutils.video import WebcamVideoStream
import os
import time
from datetime import datetime
from imutils.video import FPS
import cv2
cascadePath = "/home/pi/opencv-3.3.0/data/haarcascades/haarcascade_frontalface_default.xml"
eye_cascade = cv2.CascadeClassifier('/home/pi/opencv-3.3.0/data/haarcascades/haarcascade_eye.xml')
faceCascade = cv2.CascadeClassifier(cascadePath);
fn = input('Enter your Folder name: ')
os.system("mkdir "+fn)
vs = WebcamVideoStream(src=0).start()
while 1:
time.sleep(0.05)
frame = vs.read()
gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
faces = faceCascade.detectMultiScale(gray, 1.1, 6)
for (x,y,w,h) in faces:
cv2.imwrite(fn+"/"+ datetime.now().strftime("%H:%M:%S.%f") + ".jpg", gray[y:y+h+30,x:x+w+20])
cv2.imshow('frame',frame)
key = cv2.waitKey(1) & 0xFF
答案 0 :(得分:0)
为了捕捉头部,您还需要减小开始修剪脸部的初始点。
在您的代码中,您使用了gray[y:y+h+30,x:x+w+20]
。
y
考虑到裁剪后的脸部的高度。这是您需要减少初始裁剪点的地方。 x
表示不需要更改的脸部宽度。结论:在gray[y-20:y+h, x:x+w]
的第22行中将其更改为cv2.imwrite()
。