Python--OpenCV人脸检测

OpenCV人脸检测

OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。——百度百科

opencv的功能很强大。在人脸识别方面,它包含了很多分类器,可以识别眼睛、嘴巴、正脸等等,其中在正脸识别上有4个haar特征训练的级联分类器。
(1)haarcascade_frontalface_alt.xml
(2)haarcascade_frontalface_alt2.xml
(3)haarcascade_frontalface_alt_tree.xml
(4)haarcascade_frontalface_default.xml
这四个在不同程度上都有误检,大家根据自己的数据集都可以用来测试测试看看那个准确率更高。有人检测说default准确率最高。我都测试过,对于有些图片也不一定。下面网盘我分享了(1)和(4)两个。
代码实现:

import cv2


# 图片名
filename =r'C:\Users\lenovo\Desktop\0.jpg'


def detect(filename):

    # cv2级联分类器CascadeClassifier,xml文件为训练数据
    face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_alt.xml')
    # 读取图片
    img = cv2.imread(filename)
    # img = cv2.resize(img, (64,64))
    # 转灰度图
    # gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    # 进行人脸检测
    # scaleFactor--表示在前后两次相继的扫描中,搜索窗口的比例系数。默认为1.1即每次搜索窗口依次扩大10%;
    # minNeighbors--表示构成检测目标的相邻矩形的最小个数(默认为3个)。
    #         如果组成检测目标的小矩形的个数和小于 min_neighbors - 1 都会被排除。
    #         如果min_neighbors 为 0, 则函数不做任何操作就返回所有的被检候选矩形框,
    #         这种设定值一般用在用户自定义对检测结果的组合程序上;
    faces = face_cascade.detectMultiScale(img, 1.1, 3)
    print(faces)
    # 绘制人脸矩形框
    for (x, y, w, h) in faces:
        img = cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2)
    # 命名显示窗口
    cv2.namedWindow('people')
    # 显示图片
    cv2.imshow('people',img)
    # 保存图片
    # cv2.imwrite('./1.jpg', img2)
    # 设置显示时间,0表示一直显示
    cv2.waitKey(0)


detect(filename)

下面测试一张图片
使用alt的结果:
Python--OpenCV人脸检测_第1张图片
default的结果:
Python--OpenCV人脸检测_第2张图片
两个级联器:
链接:https://pan.baidu.com/s/1KcdIckj9vfs1sMka87EJRg
提取码:ju3e
全部代码my github

你可能感兴趣的:(opencv,人脸识别,python,计算机视觉)