opencv实现视频人脸检测

在OpenCV中主要使用了两种特征(即两种方法)进行人脸检测,Haar特征和LBP特征。使用已经训练好的XML格式的分类器进行人脸检测。在OpenCV的安装目录下的sources文件夹里的data文件夹里可以看到下图所示的内容(opencv\sources\data\haarcascades )

#-*-coding:utf8-*-#

import cv2

def detectFaces(img):
    face_cascade = cv2.CascadeClassifier("C:\\opencv\\build\\etc\\haarcascades\\haarcascade_frontalface_alt2.xml")
    if img.ndim == 3:
        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    else:
        gray = img 
    faces = face_cascade.detectMultiScale(gray, 1.2, 5)
    result = []
    for (x,y,width,height) in faces:
        result.append((x,y,x+width,y+height))
    return result


def drawFaces(img):
    faces = detectFaces(img)
    if faces: 
        for (x1,y1,x2,y2) in faces:
            cv2.rectangle(img,(x1,y1),(x2,y2),(225,105,65),3)
            font = cv2.FONT_HERSHEY_SIMPLEX
            cv2.putText(img,'FaceDetection',(x1,y1-5), font, 1,(255,0,255),2)          
    return img
def main():
    f = "./video.wmv"
    wd = "Window's name!"
    capture = cv2.VideoCapture(0)

    #save as video
    #fourcc = cv2.cv.CV_FOURCC(*'XVID')
    fourcc = cv2.VideoWriter_fourcc(*'XVID') 
    out = cv2.VideoWriter('output.avi',fourcc,20.0,(720,400))


    while(capture.isOpened()):
        ret,img = capture.read()
        img = drawFaces(img)
        if ret == True:
            out.write(img)
        cv2.imshow(wd,img)
        #press 'q' to quit
        c = cv2.waitKey(1)
        if c&0xFF == ord('q'):
            break
    #release
    capture.release()
    out.release()
    cv2.destroyAllWindows() 
main()  

猜你喜欢

转载自blog.csdn.net/weixin_33127753/article/details/80718398