如何从haar级联获取全头图像

时间:2018-07-17 03:42:17

标签: python opencv haar-classifier

我使用以下代码使用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

1 个答案:

答案 0 :(得分:0)

为了捕捉头部,您还需要减小开始修剪脸部的初始点。

在您的代码中,您使用了gray[y:y+h+30,x:x+w+20]

  • y考虑到裁剪后的脸部的高度。这是您需要减少初始裁剪点的地方。
  • x表示不需要更改的脸部宽度。

结论:在gray[y-20:y+h, x:x+w]的第22行中将其更改为cv2.imwrite()