• pythonopencv之人脸检测


    引用网址:https://www.it610.com/article/1546269872961425408.htm

    文章目录

    • 一、概述
    • 二、相关概念
    • 三、实际操作
      • 1.图片检测
      • 2.打开摄像头进行人脸检测

    一、概述

    `本文为我学习python环境下用opencv检测人脸的内容总结。

    二、相关概念

    ##opencv中提供了三种训练好的级联分类器(通过不同特征进一步筛选,最终得出所属的分类)。在相应的haarcascades、hogcascades、lbpcascades文件夹中分别存放着HAAR、HOG、LBP级联分类器,他们以.xml的文件形式存放在opencv的源文件中。
    python-opencv之人脸检测_第1张图片
    不同的.xml文件可检测不同的类型,如:眼睛、眼镜、正面人脸、鼻子等。

    三、实际操作

    1.图片检测

    代码如下(示例):

    import cv2 as cv
    def fac_detect_demo():#人脸检测函数
        gray=cv.cvtColor(img,cv.COLOR_BGR2GRAY)#图片变为灰度图,人脸特征需在灰度图中查找
        face_detector=cv.CascadeClassifier('E:/opencv/data/haarcascades/haarcascade_frontalface_default.xml')
        #通过级联检测器cv.CascadeClassifier,加载特征数据
        faces= face_detector.detectMultiScale(gray)
        #在尺度空间对图片进行人脸检测
        for x,y,w,h in faces:#绘制矩形,
            cv.rectangle(img,(x,y),(x+w,y+h),color=(23,255,255),thickness=3)#矩形第一个顶点,对角线上另一个顶点,颜色,宽度
        #cv.circle(img,center=(x+w//2,y+h//2),radius=w//2,color=(23,255,255),thickness=3)圆形绘制
    img = cv.imread('filename')
    fac_detect_demo()
    cv.imshow('detect',img)
    cv.waitKey(0)
    cv.destroyAllWindows
    

    2.打开摄像头进行人脸检测

    代码如下(示例):

    import numpy as np
    def face_detect_demo(image):
        gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
        face_detector = cv.CascadeClassifier('E:/opencv/data/haarcascades/haarcascade_frontalface_alt_tree.xml')
        faces = face_detector.detectMultiScale(gray, 1.02, 5)
        for x, y, w, h in faces:
            cv.rectangle(image, (x, y), (x+w, y+h), (0, 255, 255), 2)
        cv.imshow("result", image)
    capture = cv.VideoCapture(0)
    cv.namedWindow("result", cv.WINDOW_AUTOSIZE)
    while (True):
        #按帧读取视频,ret,frame是获cap.read()方法的两个返回值。其中ret是布尔值,如果读取帧是正确的则返回True,如果文件读取到结尾,它的返回值就为False。frame就是每一帧的图像,是个三维矩阵。
        ret, frame = capture.read()
        # cv.flip函数表示图像翻转,沿y轴翻转, 0: 沿x轴翻转, <0: x、y轴同时翻转
        frame = cv.flip(frame, 1)
        face_detect_demo(frame)
        c = cv.waitKey(10)
        if c == 27:#当键盘按下‘ESC’退出程序
            break
    cv.waitKey(0)
    cv.destroyAllWindows()
  • 相关阅读:
    C# 操作ini配置文件
    2015-2016跨年感想
    HTTP 状态码总结 (HTTP Status Codes)
    简单、精准、高效的使用搜索引擎,快速的找到你想要的结果
    ASP.NET前后台交互之JSON数据
    软件开发项目做需求分析的一点心得
    我是如何自学编程的“3遍读书法”
    C#中Request.ServerVariables详细说明及代理
    C#
    JavaScript如何计算两个日期间的时间差
  • 原文地址:https://www.cnblogs.com/bruce1992/p/16514421.html
Copyright © 2020-2023  润新知