-
识别图片如下:
-
完整代码:
import cv2
image = cv2.imread('face.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: 该參数通常被省略。在使用低版本 pencV(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("发现{}张人脸".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()
- 结果如下: