使用 OpenCV 进行面部和眼睛检测

news2024/11/24 2:13:21

OpenCV是构建计算机视觉应用程序的强大工具。计算机视觉中最常见的任务之一是人脸检测,它涉及识别图像或视频中人脸的存在、位置和面部特征。

在本文中,我们将学习如何使用 Haar 级联分类器检测图像中的人脸。

先决条件

在开始之前,你需要在计算机上安装 OpenCV。

参考:https://opencv.org/releases/

你还需要一个示例图像来测试人脸检测算法。你可以使用任何你喜欢的图像。

第 1 步:加载 Haar 级联分类器

使用 OpenCV 进行面部和眼睛检测的第一步是加载 Haar 级联分类器。分类器是一个预训练的机器学习模型,经过训练可以检测人脸和眼睛。

这是加载分类器的代码:

import cv2

face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml')

第 2 步:加载图像

接下来,我们需要加载我们要处理的图像。我们可以使用cv2模块中的imread函数来加载图像。

image = cv2.imread('Image.png')

第 3 步:将图像转换为灰度

Haar 级联分类器在灰度图像上效果最好,因此我们需要将图像转换为灰度图像。我们可以使用cvtColor函数来做到这一点。

gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

第 4 步:检测人脸

现在我们可以使用级联分类器的detectMultiScale函数来检测图像中的人脸。此函数返回代表检测到的人脸位置的矩形列表。

#detect faces
faces = face_cascade.detectMultiScale(gray, 1.1, 4)

# Get the face ROI
face_roi = gray[y:y+h, x:x+w]

#detect eyes  
eyes = eye_cascade.detectMultiScale(face_roi)

第 5 步:在脸部和眼睛周围画矩形

最后,我们可以使用rectangle函数在人脸周围绘制矩形。

#Rectangle around face
for (x, y, w, h) in faces:
    cv2.rectangle(image, (x, y), (x+w, y+h), (255, 0, 0), 2)

#Rectangle around eyes
for (ex, ey, ew, eh) in eyes:
     cv2.rectangle(frame, (x+ex, y+ey), (x+ex+ew, y+ey+eh), (0, 255, 0), 2)

第 6 步:显示图像

我们可以使用imshow函数来显示带有检测到的人脸的图像。

cv2.imshow('Face Detection', image)
cv2.waitKey()
cv2.destroyAllWindows()

完整代码——检测实时视频源中的面部和眼睛

import cv2

# Load the cascade classifiers for face and eye detection
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml')

# Start the video capture
capture = cv2.VideoCapture(0)

while True:
    # Read the frame from the video capture
    _, frame = capture.read()

    # Convert the frame to grayscale
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    # Detect faces in the frame
    faces = face_cascade.detectMultiScale(gray, 1.1, 4)

    # Loop over the faces
    for (x, y, w, h) in faces:
        # Draw a rectangle around the face
        cv2.rectangle(frame, (x, y), (x+w, y+h), (255, 0, 0), 2)

        # Get the face ROI
        face_roi = gray[y:y+h, x:x+w]

        # Detect eyes in the face ROI
        eyes = eye_cascade.detectMultiScale(face_roi)

        # Loop over the eyes
        for (ex, ey, ew, eh) in eyes:
            # Draw a rectangle around the eyes
            cv2.rectangle(frame, (x+ex, y+ey), (x+ex+ew, y+ey+eh), (0, 255, 0), 2)

    # Display the frame
    cv2.imshow('Face Recognition', frame)

    # Check if the user pressed 'q' to quit
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# Release the video capture and destroy the windows
capture.release()
cv2.destroyAllWindows()

☆ END ☆

如果看到这里,说明你喜欢这篇文章,请转发、点赞。微信搜索「uncle_pn」,欢迎添加小编微信「 woshicver」,每日朋友圈更新一篇高质量博文。

扫描二维码添加小编↓

567b4e6bc4dfe4daa6cfd9daf1a2c735.jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/374130.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android打造万能的BannerView无限轮播图

效果图:工程目录图:BannerAdapter:banner轮播图的适配器,因为服务器返回的列表图片的url,显示的时候需要转成IamgeViw; BannerScroller:设置切换页面的持续时间; BannerView&…

怎样划分MES系统实施阶段,三分钟告诉你整体实施思路

MES系统的实施阶段划分的思路是:在集成的前提下实现可视化,在可视化的基础上实现精细化,在精细化的前提下实现均衡化。生产过程透明的目的就是要实现生产过程的可视化,实现精细化生产。首先要做的就是收集生产信息,这是…

Linux->进程地址空间

目录 前言: 1. 程序地址空间回顾 2. 进程空间是什么 3. 进程地址空间与内存 4. 进程地址空间和内存的关联 5. 为什么要有进程地址空间 前言: 我们在平时学习的过程当中总是听到栈、堆、代码段等等储存空间,但是这些东西到底是什么&…

CSS3新特性

CSS3新特性 1.1、字体图标 何为字体图标? 字体图标展示的是图标,本质是字体。用于处理简单的、颜色单一的图片 字体图标的优点: 灵活性:灵活地修改样式,例如:尺寸、颜色等轻量级:体积小、渲…

Java并发编程(1)—— 操作系统、Linux、Java中进程与线程的区别

一、操作系统中什么是线程和进程 线程和进程都是操作系统中定义的结构,进程是系统中一个独立的活动程序,比如像QQ、网易云音乐,进程是操作系统进行资源分配的基本单位,一个进程中的所有线程共享进程内的资源,而线程则…

【Python学习笔记】第十八节 Python 内置函数

Python 内置函数内置函数就是Python给你提供的, 拿来直接用的函数,比如print,input等Python 内置函数一览表内置函数abs()divmod()input()open()staticmethod()all()enumerate()int()ord()str()any()eval()isinstance()pow()sum()basestring()execfile()…

ARMv8 同步和信号量(读写一致性问题):Load-Exclusive/Store-Exclusive指令详解

目录 一,Local Monitor 与 Global Monitor 1,Local Monitor 2,Global Monitor 二,Exclusive 指令的简单使用 三,Exclusive 示例程序 1,原子自加1程序 2,原子锁程序 四, 多处理…

算法设计与智能计算 || 专题一: 算法基础

专题一: 算法基础 文章目录专题一: 算法基础1. 算法的定义及特点1.1 算法的基本特征1.2 算法的基本要素1.3 算法的评定2 算法常见执行方法2.1 判断语句2.2 循环语句2.3 综合运用3. 计算复杂度4. 代码的重用5. 类函数的定义与使用5.1 定义类5.2 调用类函数1. 算法的定义及特点 …

_hand-2

实现一个迷你版的vue 入口 // js/vue.js class Vue {constructor (options) {// 1. 通过属性保存选项的数据this.$options options || {}this.$data options.data || {}this.$el typeof options.el string ? document.querySelector(options.el) : options.el// 2. 把da…

php mysql高校田径运动会成绩管理系统

第一章 引言 1 1.1 选题背景 1 1.2 编写目的 2 1.3 目标 2 1.4 功能需求 3 第二章 开发工具介绍 4 2.1 PHP 4 2.2 APACHE 5 2.3 MYSQL数据库 5 2.4 运行环境 WINDOWS XP 6 2.5 XAMPP 6 2.6 DREAMWEAVE8 6 2.7 EDITPLUS 7 第三章 需求…

【华为OD机试模拟题】用 C++ 实现 - 热点网络统计(2023.Q1)

最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 去重求和(2023.Q1) 文章目录 最近更新的博客使用说明热点网络统计【华为OD机试模拟题】题目输入输出描述示例一输入输出示例二输入输出Code使用说明 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出…

C++入门知识【超详解】

目录1.认识Chello worldC关键字2.命名空间3.std标准库4.输入输出5.缺省参数6.函数重载7.引用7.1引用的概念7.2引用的场景1.作参数2.作返回值7.3引用的注意点7.4指针和引用的区别8.auto关键字9.基于范围的for循环10.内联函数10.1概念10.2特征11. C98中的指针空值1.认识C hello …

数据结构——单链表(上)

🌇个人主页:_麦麦_ 📚今日名言:“生活总是让我们遍体鳞伤,但到后来,那些受伤的地方一定会变成我们最强壮的地方。” ——海明威《永别了武器》 目录 ​编辑 一、前言 二、正言 3.1链表的概念及结构…

HMM(隐马尔科夫模型)-理论补充2

目录 一.大数定理 二.监督学习方法 1.初始概率 2.转移概率 3.观测概率 三.Baum-Welch算法 1.EM算法整体框架 2. Baum-Welch算法 3.EM过程 4.极大化 5.初始状态概率 6.转移概率和观测概率 四.预测算法 1.预测的近似算法 2.Viterbi算法 1.定义 2. 递推&#xff1…

倒计时2天:中国工程院院士谭建荣等嘉宾确认出席,“警务+”时代来临...

近日伴随公安部、科技部联合印发通知,部署推进科技兴警三年行动计划(2023-2025年),现代科技手段与警务工作相结合的方式,正式被定义为未来警务发展的新趋势。 21世纪以来,随着科技的不断发展和创新&#xf…

硬间隔支持向量机算法、软间隔支持向量机算法、非线性支持向量机算法详细介绍及其原理详解

相关文章 K近邻算法和KD树详细介绍及其原理详解朴素贝叶斯算法和拉普拉斯平滑详细介绍及其原理详解决策树算法和CART决策树算法详细介绍及其原理详解线性回归算法和逻辑斯谛回归算法详细介绍及其原理详解硬间隔支持向量机算法、软间隔支持向量机算法、非线性支持向量机算法详细…

JavaScript Date 日期对象实例合集

文章目录JavaScript Date 日期对象实例合集一,使用 Date() 方法获得当日的日期二,使用 getFullYear() 获取年份三,使用getTime() 返回从 1970 年 1 月 1 日至今的毫秒数四,如何使用 setFullYear() 设置具体的日期五,使…

小兔鲜注册页面验证、阶段案例(登录、首页页面)(重点)、小兔鲜放大镜效果——DOM

目录 1. 小兔鲜注册页面验证 2. 阶段案例(登录、首页页面)(重点) 3. 小兔鲜放大镜效果 1. 小兔鲜注册页面验证 验证码模块有个小问题: 连续点击获取验证码会导致触发多次计时器,会导致计时出现问题&…

【Stata】从入门到精通.零基础小白必学的教程,一学就fei

视频教程移步:https://www.bilibili.com/video/BV1hK4y1d714/?p4&spm_id_frompageDriver&vd_sourcecc8074e9c81a225f214226065db53d32P3 第二讲 Stata处理数据全流程(上) P3 - 01:37内置数据 file example datasets使用…

FastDFS - 分布式文件存储系统

目录一、分布式文件存储1.分布式文件存储的由来2.常见的分布式存储框架二、FastDFS介绍三、FastDFS安装1.拉取镜像文件2.构建Tracker服务3.构建Storage服务4.测试图片上传四、客户端操作1.Fastdfs-java-client1.1 文件上传1.2 文件下载2.SpringBoot整合一、分布式文件存储 1.分…