当前位置: 首页 > news >正文

OpenCV 人脸分析----人脸识别的一个经典类cv::face::EigenFaceRecognizer

  • 操作系统:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 编程语言:C++11

算法描述

这是基于 PCA(主成分分析) 的人脸识别算法实现。它通过将人脸图像投影到一个低维的“特征脸”空间中进行识别,是最早也是最基础的人脸识别方法之一。

构造函数与参数

你可以使用以下方式创建 EigenFaceRecognizer:

// 默认构造
Ptr<EigenFaceRecognizer> model = EigenFaceRecognizer::create();// 或者指定 PCA 成分数和置信度阈值
Ptr<EigenFaceRecognizer> model = EigenFaceRecognizer::create(num_components, threshold);
参数描述
num_componentsPCA 保留的主成分数,默认为 0(自动计算)
threshold预测时的置信度阈值,超过此值认为未知身份

核心函数摘要

方法描述
void train(InputArrayOfArrays _src, InputArray _labels)使用图像集和对应标签训练模型
void predict(InputArray src, int &label, double &confidence) const预测输入图像的标签及置信度
void save(const String& filename)保存训练好的模型到文件
void load(const String& filename)从文件加载模型
Mat getEigenValues()获取特征值
vector getEigenVectors()获取特征向量(即特征脸)
vector getProjections()获取训练样本的投影向量
double getThreshold()获取当前置信度阈值
void setThreshold(double val)设置置信度阈值

注意事项

  • 图像必须为 单通道灰度图;
  • 所有图像尺寸必须一致(例如统一缩放为 96x96);
  • 标签为整数类型,表示不同身份 ID;
  • 对光照、姿态变化较敏感;
  • 不适用于大规模数据集或复杂场景;

代码示例


#include <opencv2/opencv.hpp>
#include <opencv2/face.hpp>
#include <vector>using namespace cv;
using namespace cv::face;
using namespace std;int main() {// 准备训练数据:人脸图像和对应的标签vector<Mat> images;     // 人脸图像(灰度图)vector<int> labels;     // 标签(如 0: 张三, 1: 李四)// 示例加载图像并转换为灰度图Mat img1 = imread("/media/dingxin/data/study/OpenCV/sources/images/1.pgm", IMREAD_GRAYSCALE);Mat img2 = imread("/media/dingxin/data/study/OpenCV/sources/images/2.pgm", IMREAD_GRAYSCALE);images.push_back(img1);images.push_back(img2);labels.push_back(0);  // 同一人使用相同标签labels.push_back(0);// 创建 EigenFaceRecognizer 实例Ptr<EigenFaceRecognizer> model = EigenFaceRecognizer::create();// 训练模型model->train(images, labels);// 预测新图像Mat testImage = imread("/media/dingxin/data/study/OpenCV/sources/images/Lenna.png", IMREAD_GRAYSCALE);resize(testImage, testImage, Size(img2.cols, img2.rows));int predictedLabel;double confidence;model->predict(testImage, predictedLabel, confidence);cout << "Predicted label: " << predictedLabel << ", Confidence: " << confidence << endl;return 0;
}

运行结果

Predicted label: 0, Confidence: 1490.02
http://www.dtcms.com/a/268580.html

相关文章:

  • Oracle PL/SQL 编程基础详解(从块结构到游标操作)
  • idea 使用vscode 快捷键
  • UE 材质 变体 概念
  • ClickHouse 入门详解:它到底是什么、优缺点、和主流数据库对比、适合哪些场景?
  • 1.1_5_2 计算机网络的性能指标(下)
  • 【Vben3全解】【组件库开发】解决组件库开发中css的命名难题,保证代码质量,构建useNamespace函数
  • docker所占硬盘内存指令
  • 强化学习:Distributed PPO (DPPO) 学习笔记
  • Day08-Flask 或 Django 简介:构建 Web 应用程序
  • C++高频知识点(三)
  • 基于STM32设计的心率脉搏测量仪(项目资料)(ID:9)
  • 【Linux | 网络】网络编程套接字
  • Baklib作为赞助商参加RubyConf China 2025 技术大会
  • Java基础:随机数生成、循环结构与方法封装详解
  • 国产MCU学习Day10——CW32F030C8T6模拟电压比较器全解析
  • 【EGSR2025】材质+扩散模型+神经网络相关论文整理随笔
  • springsecurity03--异常拦截处理(认证异常、权限异常)
  • 【机器学习深度学习】多分类评估策略:混淆矩阵计算场景模拟示例
  • Rust 注释
  • OpenAI要开发能聊天的AI版Office挑战微软?
  • 【Spring】Spring Boot + OAuth2 + JWT + Gateway的完整落地方案,包含认证流程设计
  • window 服务器上部署前端静态资源以及nginx 配置
  • 揭秘图像LLM:从像素到语言的智能转换
  • 创意Python爱心代码
  • 基于Flink 1.20、StarRocks与TiCDC构建高效数据处理链路教程
  • linux如何下载github的一个项目
  • stm32与tp-linkv2接线、解决识别不到芯片问题
  • C++ -- string类的模拟实现
  • Go的标准库http原理解析
  • 【论文阅读】Few-Shot PPG Signal Generation via Guided Diffusion Models