import cv2 as cv
import matplotlib.pyplot as plt
from pylab import mpl
# matpltotlib 绘图时正常显示字体
mpl.rcParams['font.sans-serif'] = ['SimHei']
'''
人脸识别
1、检测流程:
①读取图片,并转换成灰度图
②实例化人脸核眼睛检测的分类器对象
# 实例化级联分类器
classifier = cv.CascadeClassifier("haarcascade_frontalface_default.xml")
# 加载分类器
classifier.load('haarcascade_frontalface_default.xml')
③进行人脸核眼睛的检测
rect = classifier.detectMultiScale(gray, scaleFactor, minNeighbors, minSize, maxsize)
参数:
gray:要进行检测的人脸图像
scaleFactor:前后两次扫描中,搜索窗口的比例系数
minnneighbors:目标至少要被检测到minneighbors次才会被认为是目标
minSize和maxsize:目标的最小尺寸和最大尺寸
'''
img = cv.imread('face.jpg')
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
# 实例化OpenCV人脸核眼睛识别的分类器
face_cas = cv.CascadeClassifier('D:\Anaconda\envs\cv\Lib\site-packages\cv2\data\haarcascade_frontalface_default.xml')
face_cas.load('D:\Anaconda\envs\cv\Lib\site-packages\cv2\data\haarcascade_frontalface_default.xml')
eyes_cas = cv.CascadeClassifier('D:\Anaconda\envs\cv\Lib\site-packages\cv2\data\haarcascade_eye.xml')
eyes_cas.load('D:\Anaconda\envs\cv\Lib\site-packages\cv2\data\haarcascade_eye.xml')
# 调用识别人脸
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+h, y+w), (0, 255, 0), 3)
# 在识别出的人脸中进行眼睛的检测
roi_color = img[y: y+h, x:x+w]
roi_gray = gray[y: y+h, x:x+w]
eyes = eyes_cas.detectMultiScale(roi_gray)
for (ex, ey, ew, eh) in eyes:
cv.rectangle(roi_color, (ex, ey), (ex+ew, ey+eh), (0, 255, 0), 2)
# 检测结果的绘制
plt.figure(figsize=(8, 6), dpi=100)
plt.imshow(img[:, :, ::-1]), plt.title('检测结果')
plt.xticks([]), plt.yticks([])
plt.show()
OpenCV学习之人脸检测
最新推荐文章于 2024-07-02 10:24:12 发布