Python+OpenCV入门教程【十八】人脸检测

Opencv的人脸检测函数,定义了具体可跟踪对象类型的数据文件。

Haar级联分类器,通过对比分析相邻图像区域来判断给定图像或子图像与已知对象是否匹配。

两个图像的相似程度可以通过它们对应特征的欧式距离来度量。距离可能以空间坐标或颜色坐标来定义。类Haar特征是一种用于实现实时人脸跟踪的特征。每个类Haar特征都描述了相邻图像区域的对比模式。例如,边,顶点和细线都能生成具有判断性的特征。

Haar级联级具有尺度不变性,换句话说,它在尺度变化上具有鲁棒性。但是,opencv的Haar级联不具有旋转不变性。

在opencv源代码的副本中会有一个文件夹data/haarcascades,该文件夹包括了所有opencv的人脸检测的xml文件,这些文件可用于检测静止图像,视频和摄像头所得到图像中的人脸。

在开始写代码之前,先要下载opencv源代码包:在这里插入图片描述

import cv2 as cv


# 人脸检测
def face_image():
    # 转灰度图
    gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY)
    face_detector = cv.CascadeClassifier("opencv-3.3.1/data/haarcascades/haarcascade_frontalface_alt_tree.xml")
    faces = face_detector.detectMultiScale(gray, 1.02, 5)  # 第二个参数是移动距离,第三个参数是识别度,越大识别读越高
    for x, y, w, h in faces:
        cv.rectangle(src, (x, y), (x + w, y + h), (0, 0, 255), 2)  # 后两个参数,一个是颜色,一个是边框宽度
    cv.imshow("result", src)


# 摄像头人脸检测
def face_image(src):
    gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY)
    face_detector = cv.CascadeClassifier("haarcascade_frontalface_alt_tree.xml")
    faces = face_detector.detectMultiScale(gray, 1.02, 5)  # 第二个参数是移动距离,第三个参数是识别度,越大识别读越高
    for x, y, w, h in faces:
        cv.rectangle(src, (x, y), (x + w, y + h), (0, 0, 255), 2)  # 后两个参数,一个是颜色,一个是边框宽度
    cv.imshow("result", src)


if __name__ == '__main__':
    '''
    人脸检测
    '''
    src = cv.imread("data/lena.jpg")
    cv.imshow("original", src)
    face_image()
    cv.waitKey(0)
    cv.destroyAllWindows()

    '''
    摄像头人脸检测
    '''
    capture = cv.VideoCapture(0)
    while (True):
        ret, frame = capture.read()
        frame = cv.flip(frame, 1)
        face_image(frame)
        if cv.waitKey(10) & 0xFF == ord('q'):  # 键盘输入q退出窗口,不按q点击关闭会一直关不掉 也可以设置成其他键。
            break
    face_image()
    cv.waitKey(0)
    cv.destroyAllWindows(
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

缄默:)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值