美文网首页
人脸检测---OpenCV-Python开发指南(41)

人脸检测---OpenCV-Python开发指南(41)

作者: 极客学编程 | 来源:发表于2021-05-11 17:10 被阅读0次

    人脸检测函数

    在OpenCV中,人脸检测使用的函数是cv2.CascadeClassifier.detectMultiScale(),它可以检测图像中所有的人脸。其完整定义如下:

    def detectMultiScale(self, image, scaleFactor=None, minNeighbors=None, flags=None, minSize=None, maxSize=None):
    

    image:待检测的图像,通常为灰度图像

    scaleFactor:表示在前后两次相继的扫描中,搜索窗口的缩放比例

    minNeighbors:表示构成检测目标的相邻矩形的最小个数。默认值为3,表示有3个以上的检测标记存在时,才认为人脸的存在。如果希望提高检测的准确率,可以将该值设置的更大,但同时可能会让一些人脸无法被检测到

    flags:不常用参数,一般省略。

    minSize:目标的最小尺寸,小于这个尺寸的目标将被忽略

    maxSize:目标的最大尺寸,大于这个尺寸的目标将被忽略

    该函数的返回值是目标对象的矩形框向量组。

    检测图像中的N个人脸

    既然我们已经了解了人脸检测函数。下面,我们就来使用其检测图像中的人脸,具体代码如下所示:

    import cv2
    
    img = cv2.imread("41.jpg")
    faceCascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    faces = faceCascade.detectMultiScale(gray, scaleFactor=1.15, minNeighbors=2, minSize=(5, 5))
    print(faces)
    print("该图一共有{0}人脸".format(len(faces)))
    for (x, y, w, h) in faces:
        cv2.circle(img, (int((2 * x + w) / 2), int((2 * y + h) / 2)), int(w / 2), (0, 255, 0), 2)
    cv2.imshow("result", img)
    cv2.waitKey()
    cv2.destroyAllWindows()
    

    OpenCV已经自带了人脸的Haar特征分类器,该分类器有20多种,提供多种对象的检测功能,比如有鼻子,有耳朵等。这里我们选择haarcascade_frontalface_default.xml人脸识别分类器。

    通过detectMultiScale函数返回的是人脸的矩形框向量组,包括左上角坐标(x,y),长宽(w,h)。而绘制人脸圆形框只需要将矩形的中心设置为圆心,矩形的宽度一般设置为半径即可。

    运行之后,我们可以识别行尸走肉图像中的人脸:

    1.png

    测试原图为:


    2.jpg

    相关文章

      网友评论

          本文标题:人脸检测---OpenCV-Python开发指南(41)

          本文链接:https://www.haomeiwen.com/subject/sukelltx.html