基于OpenCV的人脸识别:EigenFaces算法

news2025/5/10 9:52:45

文章目录

    • 引言
    • 一、概述
    • 二、代码解析
      • 1. 准备工作
      • 2. 加载训练图像
      • 3. 设置标签
      • 4. 准备测试图像
      • 5. 创建和训练识别器
      • 6. 进行预测
      • 7. 显示结果
    • 三、代码要点
    • 总结

引言

人脸识别是计算机视觉领域的一个重要应用,今天我将通过一个实际案例来展示如何使用OpenCV中的EigenFaces算法实现简单的人脸识别系统。

一、概述

本文演示了如何使用OpenCV的**EigenFaceRecognizer对预先准备好的面部图像进行训练,然后对新的测试图像进行识别。我们使用了名为为"linyuner"和"chendulin"的多张照片作为训练集,然后测试系统能否正确识别新输入的照片。

二、代码解析

1. 准备工作

首先导入必要的库:

import cv2
import numpy as np

2. 加载训练图像

我们创建了一个空列表images来存储训练图像,并确保所有图像大小一致:

images = []  # 读取训练图像,注意:图片大小要一致
a = cv2.imread('linyuner 1.jpg', 0)  # 以灰度模式读取图像
a = cv2.resize(a,(120,180))  # 统一调整大小为120×180
b = cv2.imread('linyuner 2.jpg', 0)
b = cv2.resize(b,(120,180))
c = cv2.imread('chendulin 1.jpg', 0)
c = cv2.resize(c,(120,180))
d = cv2.imread('chendulin 2.jpg', 0)
d = cv2.resize(d,(120,180))

images.append(a)
images.append(b)
images.append(c)
images.append(d)

3. 设置标签

为每张训练图像分配对应的标签:

labels = [0,0,1,1]  # 0代表linyuner,1代表chendulin

4. 准备测试图像

加载并预处理待识别的图像:

pre_image = cv2.imread('chendulin 3.jpg', 0)
pre_image = cv2.resize(pre_image,(120,180))

5. 创建和训练识别器

使用OpenCV的EigenFaceRecognizer:

recognizer = cv2.face.EigenFaceRecognizer_create(threshold=5000)
recognizer.train(images,np.array(labels))

6. 进行预测

label,confidence = recognizer.predict(pre_image)

7. 显示结果

将识别结果标注在原始图像上并显示:

dic={0:'linyuner',1:'chendulin',-1:'无法识别'}
print("这人是:",dic[label])
print('置信度为:',confidence)

aa = cv2.putText(cv2.imread('chendulin 3.jpg').copy(), dic[label], (10, 30), 
                cv2.FONT_HERSHEY_COMPLEX_SMALL, 0.9, (0,0,255), 2)
aa = cv2.resize(aa,dsize=None,fy=0.6,fx=0.6)
cv2.imshow('xx',aa)
cv2.waitKey(0)

我们选择一张陈都灵的照片来进行验证
在这里插入图片描述
在这里插入图片描述

三、代码要点

  1. EigenFaces算法:这是基于PCA(主成分分析)的人脸识别方法,通过提取人脸图像的主要特征分量来进行识别。

  2. 图像预处理:所有图像被转换为灰度并调整为相同尺寸,这是大多数机器学习算法对输入数据的基本要求。

  3. 阈值设置threshold=5000参数设置了识别阈值,当置信度超过此值时,识别结果为"无法识别"。

  4. 置信度:置信度数值越小表示匹配度越高。

总结

通过这个简单的例子,我们展示了如何使用OpenCV快速实现一个基础的人脸识别系统。虽然EigenFaces算法相对简单,但它很好地演示了人脸识别的基本原理,对于理解更复杂的系统有很大帮助。

希望这篇博客对你有所帮助!如果你有任何问题或建议,欢迎在评论区留言讨论。

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

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

相关文章

【深度学习新浪潮】智能追焦技术全解析:从算法到设备应用

一、智能追焦技术概述 智能追焦是基于人工智能和自动化技术的对焦功能,通过深度学习算法识别并持续跟踪移动物体(如人、动物、运动器械等),实时调整焦距以保持主体清晰,显著提升动态场景拍摄成功率。其核心优势包括: 精准性:AI 算法优化复杂运动轨迹追踪(如不规则移动…

网络研讨会开发注册中, 5月15日特励达力科,“了解以太网”

在线研讨会主题 Understanding Ethernet - from basics to testing & optimization 了解以太网 - 从基础知识到测试和优化 注册链接# https://register.gotowebinar.com/register/2823468241337063262 时间 北京时间 2025 年 5 月 15 日 星期四 下午 3:30 - 4:30 适宜…

STL?vector!!!

一、前言 之前我们借助手撕string加深了类和对象相关知识,今天我们将一起手撕一个vector,继续深化类和对象、动态内存管理、模板的相关知识 二、vector相关的前置知识 1、什么是vector? vector是一个STL库中提供的类模板,它是存储…

从黔西游船侧翻事件看极端天气预警的科技防线——疾风气象大模型如何实现精准防御?

近日,贵州省黔西市一起载人游船侧翻事故令人痛心。调查显示,事发时当地突遇强风暴雨,水面突发巨浪导致船只失控。这一事件再次凸显:在极端天气频发的时代,传统“经验式防灾”已不足够,唯有依靠智能化的气象预警技术,才能筑牢安全底线。 极端天气预警的痛点:为什么传统方…

FastChat部署大模型

一、前提条件 1、系统环境(使用的 autodl 算力平台) 2、安装相关库 安装 modescope pip3 install -U modelscope # 或使用下方命令 # pip3 install -U modelscope -i https://mirror.sjtu.edu.cn/pypi/web/simple安装 fastchat git clone https://gi…

智汇云舟亮相第二十七届北京科博会

5月8日,备受瞩目的第二十七届中国北京国际科技产业博览会(以下简称:北京科博会)在国家会议中心盛大开幕。作为我国科技领域的重要盛会,北京科博会汇聚了众多前沿科技成果与创新力量,为全球科技产业交流搭建…

Redis最新入门教程

文章目录 Redis最新入门教程1.安装Redis2.连接Redis3.Redis环境变量配置4.入门Redis4.1 Redis的数据结构4.2 Redis的Key4.3 Redis-String4.4 Redis-Hash4.5 Redis-List4.6 Redis-Set4.7 Redis-Zset 5.在Java中使用Redis6.缓存雪崩、击穿、穿透6.1 缓存雪崩6.2 缓冲击穿6.3 缓冲…

北斗三号手持终端设备功能与应用

北斗三号卫星系统是我国自主建设、独立运行的全球卫星导航系统。通过多颗不同轨道卫星组成的,这些卫星持续向地球发射携带精确时间和位置信息的信号。地面上的北斗手持终端接收到至少四颗卫星信号后,利用信号传播时间差,通过三角函数等算法&a…

opencv中的图像特征提取

图像的特征,一般是指图像所表达出的该图像的特有属性,其实就是事物的图像特征,由于图像获得的多样性(拍摄器材、角度等),事物的图像特征有时并不特别突出或与无关物体混杂在一起,因此图像的特征…

【JVM-GC调优】

一、预备知识 掌握GC相关的VM参数,会基本的空间调整掌握相关工具明白一点:调优跟应用、环境有关,没有放之四海而皆准的法则 二、调优领域 内存锁竞争cpu占用io 三、确定目标 【低延迟】:CMS、G1(低延迟、高吞吐&a…

shopping mall(document)

shopping mall(document) 商城的原型,学习,优化,如何比别人做的更好,更加符合大众的习惯 抄别人会陷入一个怪圈,就是已经习惯了,也懒了,也不带思考了。 许多产品会迫于…

qiankun微前端任意位置子应用

qiankun微前端任意位置子应用 主项目1、安装qiankun2、引入注册3、路由创建4、路由守卫 二、子项目1、安装sh-winter/vite-plugin-qiankun2、main.js配置3、vite.config.js配置 三、问题解决 主项目 1、安装qiankun npm i qiankun -S2、引入注册 创建存放子应用页面 //whpv…

第十五章,SSL VPN

前言 IPSec 和 SSL 对比 IPSec远程接入场景---client提前安装软件,存在一定的兼容性问题 IPSec协议只能够对感兴趣的流量进行加密保护,意味着接入用户需要不停的调整策略,来适应IPSec隧道 IPSec协议对用户访问权限颗粒度划分的不够详细&…

spring5.x讲解介绍

Spring 5.x 是 Spring Framework 的重要版本升级,全面拥抱现代 Java 技术栈,其核心改进涵盖响应式编程、Java 8支持、性能优化及开发模式创新。以下从特性、架构和应用场景三个维度详细解析: 一、核心特性与架构改进 Java 8 全面支持 Spring …

荣耀A8互动娱乐组件部署实录(第3部分:控制端结构与房间通信协议)

作者:曾在 WebSocket 超时里泡了七天七夜的苦命人 一、控制端总体架构概述 荣耀A8控制端主要承担的是“运营支点”功能,也就是开发与运营之间的桥梁。它既不直接参与玩家行为,又控制着玩家的行为逻辑和游戏规则触发机制。控制端的主要职责包…

levelDB的数据查看(非常详细)

起因:.net大作业天气预报程序(WPF)答辩时,老师问怎么维持数据持久性的,启动时加载的数据存在哪里,我明白老师想考的应该是json文件的解析(正反),半天没答上来存那个文件了(老师默认这个文件是自…

在Fiddler中添加自定义HTTP方法列并高亮显示

在Fiddler中添加自定义HTTP方法列并高亮显示 Fiddler 是一款强大的 Web 调试代理工具,允许开发者检查和操作 HTTP 流量。一个常见需求是自定义 Web Sessions 列表,添加显示 HTTP 方法(GET、POST 等)的列,并通过颜色区…

基于公共卫生大数据收集与智能整合AI平台构建测试:从概念到实践

随着医疗健康数据的爆发式增长,如何有效整合、分析和利用这些数据已成为公共卫生领域的重要挑战。传统方法往往难以应对数据的复杂性、多样性和海量性,而人工智能技术的迅猛发展为解决这些挑战提供了新的可能性。基于数据整合与公共卫生大数据的AI平台旨在构建一个全面的生态…

clahe算法基本实现

一、背景介绍 图像算法处理中,经常需要遇到图像对比度调整的情况,CLAHE(Contrast Limited Adaptive Histogram Equalization)则是一种基于直方图,使用非常普遍的图像对比度调整算法。 关于这个算法的介绍有很多,基本原理这些&…

python打卡day20

特征降维------特征组合(以SVD为例) 知识点回顾: 奇异值的应用: 特征降维:对高维数据减小计算量、可视化数据重构:比如重构信号、重构图像(可以实现有损压缩,k 越小压缩率越高&#…