OpenCV-Python系列·第二十一集:检测&跟踪人眼

版权声明:本文为博主原创文章,未经博主允许不得转载。若有任何问题,请联系QQ:575925154(加好友时,请备注:CSDN) https://blog.csdn.net/Miracle0_0/article/details/82222248

Tip:先确定脸部的位置,然后再确定眼睛的位置。

# -*- coding: utf-8 -*-
"""
Created on Wed Aug 29 21:48:21 2018

@author: Miracle

"""
import cv2

def detectFace():
    #加载人脸检测的配置文件
    face_cascade = cv2.CascadeClassifier('../data/haarcascades/haarcascade_frontalface_alt.xml')
    eye_cascade = cv2.CascadeClassifier('../data/haarcascades/haarcascade_eye.xml')
    #判断是否可行
    if eye_cascade.empty() and face_cascade.empty():
        raise IOError('Cannot load cascade classifier xml files!')
    #打开摄像头
    cap = cv2.VideoCapture(0)
    scaling_factor = 1.15
   
    if not cap.isOpened:
        raise IOError('Cannot open webcam!')
    
    while True:
        ret,frame = cap.read()
        if not ret:
            break
        frame = cv2.resize(frame,None,
                           fx = scaling_factor,
                           fy = scaling_factor,
                           interpolation = cv2.INTER_LINEAR)
        gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
        
        #获取脸部位置
        face_rects = face_cascade.detectMultiScale(gray)
        
        #获取脸部地址
        for (x,y,w,h) in face_rects:
            roi_gray = gray[y:y+h,x:x+h]
            roi_color = frame[y:y+h,x:x+h]
            eyes = eye_cascade.detectMultiScale(roi_gray)
            
            for (x_eye,y_eye,w_eye,h_eye) in eyes:
                center = (int(x_eye+0.5*w_eye),int(y_eye+0.5*h_eye))
                radius = int(0.3*(w_eye+h_eye))
                color = (0,255,0)
                thickness = 3
                cv2.circle(roi_color,center,radius,color,thickness)
        
        cv2.imshow('detecting eye',frame)
        
        if cv2.waitKey(1) == 27:
            break
    cap.release()
    cv2.destroyAllWindows()

if __name__ == '__main__':
    detectFace()

猜你喜欢

转载自blog.csdn.net/Miracle0_0/article/details/82222248