import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt
# 设置兼容中文
plt.rcParams['font.family'] = ['sans-serif']
plt.rcParams['font.sans-serif'] = ['SimHei']
D:AnacondaAZWZlibsite-packagesnumpy_distributor_init.py:30: UserWarning: loaded more than 1 DLL from .libs:
D:AnacondaAZWZlibsite-packagesnumpy.libslibopenblas.NOIJJG62EMASZI6NYURL6JBKM4EVBGM7.gfortran-win_amd64.dll
D:AnacondaAZWZlibsite-packagesnumpy.libslibopenblas.WCDJNK7YVMPZQ2ME2ZZHJJRJ3JIKNDB7.gfortran-win_amd64.dll
warnings.warn("loaded more than 1 DLL from .libs:n%s" %
cv.__file__
'D:\Anaconda\AZWZ\lib\site-packages\cv2\cv2.cp38-win_amd64.pyd'
# 以灰度图的形式读取图片
img = cv.imread('img/wulin.jpeg')
gray = cv.cvtColor(img,cv.COLOR_BGR2GRAY)
# 实例化OpenCV人脸识别的分类器
face_cas = cv.CascadeClassifier("haarcascade_frontalface_default.xml")
face_cas.load(r"D:/Anaconda/AZWZ/lib/site-packages/cv2/data/haarcascade_frontalface_default.xml")
True
# 实例化OpenCV眼睛识别的分类器
eyes_cas = cv.CascadeClassifier("haarcascade_eye.xml")
eyes_cas.load(r"D:/Anaconda/AZWZ/lib/site-packages/cv2/data/haarcascade_eye.xml")
True
# 调用识别人脸
faceRects = face_cas.detectMultiScale(gray,scaleFactor=1.2,minNeighbors=3,minSize=(32,32))
for faceRect in faceRects:
x,y,w,h = faceRect
# 在图片上框出人脸
cv.rectangle(img,(x,y),(x+w,y+h),(0,0,255),2)
# 在识别出的人脸中再次进行眼睛的识别
roi_color = img[y:y+h,x:x+w]
roi_gray = gray[y:y+h,x:x+w]
eyesRects = eyes_cas.detectMultiScale(roi_gray,minNeighbors=1,minSize=(1,1))
for (ex,ey,ew,eh) in eyesRects:
# 框出眼睛
cv.rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(0,255,0),2)
# 结果展示
plt.figure(dpi=500)
plt.imshow(img[:,:,::-1])