在计算机视觉领域,人脸检测是一项基础且重要的任务,它在安防监控、人机交互、图像编辑等众多应用中都有着广泛的应用。OpenCV 作为一个强大的计算机视觉库,提供了简单易用的人脸检测功能。本文将结合具体代码,详细介绍如何使用 OpenCV 进行人脸检测,并深入探讨其背后的原理。
OpenCV 中的人脸检测主要基于 Haar 级联分类器。Haar 级联分类器是一种基于机器学习的目标检测方法,它使用 Haar 特征来描述目标的外观,并通过级联结构来快速排除非目标区域。
import cv2
image = cv2.imread('people.png')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# '''-------------------加载分类器------------------------'''
faceCascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
# """------------------- 分类器检测实现人脸识别 ------------------------"""
# # objects = cv2.CascadeClassifier.detectMultiScale( image[,scaleFactor
# # [,minNeighbors[, flags[, minSize[,maxSize]]]]] )
# # 其中,各个参数及返回值的含义如下。
# # ·image:待检测图像,通常为灰度图像。
# # ·scaleFactor:表示在前后两次相继扫描中搜索窗口的缩放比例。识别,扫描,按照不同比例来进行扫描
# # ·minNeighbors:表示构成检测目标的相邻矩形的最小个数。在默认情况下,该参数的值为 3,
# # 表示有 3 个以上的检测标记存在时才认为存在人脸。如果希望提高检测的准确率可以将该参数的值设置得更大,
# # 但这样做可能会让一些人脸无法被检测到。
# # flags: 该参数通常被省略。在使用低版本 OpenCV (OpenCV 1.X 版本)时,该参数可能会被设置为
# # CV_HAAR_DO_CANNY_PRUNING,表示使用 Canny 边缘检测器拒绝一些区域。
# # ·minSize: 目标的最小尺寸,小于这个尺寸的目标将被忽略。
# # ·maxSize: 目标的最大尺寸,大于这个尺寸的目标将被忽略。通常情况下,将该可选参数省略即可。
# # 若 maxSize 和 minSize 大小一致,则表示仅在一个尺度上查找目标。
# # ·objects: 返回值,目标对象的矩形框向量组。该值是一组矩形信息,
# # 包含每个检测到的人脸对应的矩形框的信息 (x轴方向位置、y轴方向位置、宽度、高度)。
faces = faceCascade.detectMultiScale(gray, scaleFactor=1.05,minNeighbors=9, minSize=(8, 8))
print("发现{0}张人脸!".format(len(faces)))
print("其位置分别是:", faces)
"""-------------- 标注人脸及显示 -------------------"""
for (x, y, w, h) in faces:
cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 2)
cv2.imshow("result", image)
cv2.waitKey(0)
cv2.destroyAllWindows()
faceCascade=cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
cap=cv2.VideoCapture(0)
while True:
ret,image=cap.read()
image=cv2.flip(image,1)
if ret is None:
break
gray=cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
faces=faceCascade.detectMultiScale(gray,scaleFactor=1.1,minNeighbors=16,minSize=(5,5))
for (x,y,w,h) in faces:
cv2.rectangle(image,(x,y),(x+w,y+h),(0,255,0),2)
cv2.imshow('cv_xml',image)
key=cv2.waitKey(10)
if key==27:
break
cap.release()
cv2.destroyAllWindows()
上述是通过摄像头实现人脸检测的一段代码,大家感兴趣的可以复制下来自己去试一试!
运行结果如下
通过本文的介绍,我们了解了如何使用 OpenCV 进行人脸检测,并深入探讨了其背后的原理。OpenCV 提供的 Haar 级联分类器是一种简单有效的人脸检测方法,适用于大多数实际应用场景。希望本文对大家在计算机视觉领域的学习和实践有所帮助。最后,欢迎大家关注一起交流人工智能技术!