import cv2
#加载预训练的人脸、眼睛检测XML模型
face_cascade=cv2.CascadeClassifier('C:/Users/xpp/anaconda3/Lib/site-packages/cv2/data/haarcascade_frontalface_default.xml')
eye_cascade=cv2.CascadeClassifier('C:/Users/xpp/anaconda3/Lib/site-packages/cv2/data/haarcascade_eye.xml')
#加载图像或者视频帧(灰度图)
img=cv2.imread('C:/Users/xpp/Desktop/Lena.png')
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
#检测人脸
faces=face_cascade.detectMultiScale(gray,1.3,5)
#遍历人脸并绘制面部ROI为蓝色
for (x,y,w,h) in faces:
cv2.rectangle(img,(x,y),(x w,y h),(255,0,0),2)
roi_gray=gray[y:y h,x:x w]
roi_color=img[y:y h,x:x w]
#进行眼睛的检测
eyes=eye_cascade.detectMultiScale(roi_gray)
#绘制眼睛ROI为绿色
for (ex,ey,ew,eh) in eyes:
cv2.rectangle(roi_color,(ex,ey),(ex ew,ey eh),(0,255,0),2)
cv2.imshow('img',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
算法:人眼检测是一种基于机器学习的方法,其中级联函数是从大量正面和负面图像中训练出来的,然后使用它来检测图像中的对象。
OpenCV库维护一个预先训练好的Haar级联库。包括: haarcascade_frontalface_default.xml:检测面部 haarcascade_eye.xml:检测左眼和右眼 haarcascade_smile.xml:检测面部是否存在嘴部 haarcascade_eye_tree_eyeglasses.xml:检测是否带墨镜 haarcascade_frontalcatface.xml:检测猫脸 haarcascade_frontalcatface_extended.xml:检测猫脸延伸 haarcascade_frontalface_alt.xml:检测猫脸属性 haarcascade_frontalface_alt_tree.xml haarcascade_frontalface_alt2.xml haarcascade_fullbody.xml:检测全身 haarcascade_lefteye_2splits.xml:检测左眼 haarcascade_licence_plate_rus_16stages.xml:检测证件 haarcascade_lowerbody.xml:检测下半身 haarcascade_profileface.xml haarcascade_righteye_2splits.xml:检测右眼 haarcascade_russian_plate_number.xml:检测俄罗斯字母车牌号 haarcascade_upperbody.xml:检测上半身
链接:https://github.com/seminar2012/opencv/tree/master/data/haarcascades