首页 > 解决方案 > 如何从 haar 级联中获取完整的头部图像

问题描述

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

标签: pythonopencvhaar-classifier

解决方案


为了捕捉头部,您还需要减少开始裁剪面部的初始点。

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

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

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


推荐阅读