1、加载xml(两个xml文件,一个描述的是人脸,一个描述的是眼睛);2、加载待识别的图片;3、转换为灰度图,计算haar特征(计算haart特征由opencv来完成);4检测出当前的haar特征,以及人脸上的眼睛;5、对检测结果进行遍历,并绘制出人脸和眼睛
# 1 load xml 2 load jpg 3 haar gray 4 detect 5 draw
import cv2
import numpy as np
# load xml 1 file name
face_xml = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
eye_xml = cv2.CascadeClassifier('haarcascade_eye.xml')
# load jpg
img = cv2.imread('face.jpg')
cv2.imshow('src',img)
# haar gray
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
# detect faces(检测图片中的人脸) (灰度图的数据,缩放系数,目标大小<人脸最少不能小于5个像素>)
faces = face_xml.detectMultiScale(gray,1.3,5)
print('face=',len(faces)) #获取当前人脸的个数
# draw,框出当前的每一个人脸
for (x,y,w,h) in faces:
cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2) #画方框
roi_face = gray[y:y+h,x:x+w] #灰度数据
roi_color = img[y:y+h,x:x+w] #彩色数据
# 1 gray 获取眼睛
eyes = eye_xml.detectMultiScale(roi_face)
print('eye=',len(eyes)) #获取当前眼睛的个数
#框出所有眼睛
#for (e_x,e_y,e_w,e_h) in eyes:
#cv2.rectangle(roi_color,(e_x,e_y),(e_x+e_w,e_y+e_h),(0,255,0),2)
cv2.imshow('dst',img)
cv2.waitKey(0)


网友评论