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

OpenCV 人脸分析------面部关键点检测类cv::face::FacemarkLBF

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

算法描述

使用 Local Binary Features (LBF) 算法进行面部关键点检测(facial landmark detection)。该算法通过级联回归树预测人脸的 68 个关键点,具有较高的精度和速度。

公共成员函数

static Ptr<FacemarkLBF> create(const Params &parameters = Params())

作用:创建一个 FacemarkLBF 实例。
参数:
parameters: 可选的 LBF 参数配置。
返回值:返回 FacemarkLBF 的智能指针对象。

 virtual bool loadModel(const String& filename) override

作用:加载预训练的 LBF 模型文件(.yaml 或 .yml 格式)。
参数:
filename: 模型文件路径。
返回值:成功返回 true,失败返回 false。
注意:模型文件通常是 lbfmodel.yaml。

 virtual bool fit(InputArray image, const std::vector<cv::Rect>& faces, CV_OUT std::vector<std::vector<cv::Point2f>>& landmarks) override

作用:对图像中的一张或多张人脸进行面部关键点拟合。
参数:

  • image: 输入图像(建议为灰度图)。
  • faces: 包含每张人脸的边界框(std::vectorcv::Rect)。
  • landmarks: 输出结果,是一个二维向量,每个子向量对应一张人脸的关键点集合。

返回值:成功返回 true,否则 false。

`void setParameters(const Params& parameters)`

作用:设置 LBF 算法的参数。
参数:

  • parameters: LBF 参数结构体。
const Params& getParameters() const

作用:获取当前设置的 LBF 参数。

参数结构体 cv::face::FacemarkLBF::Params

这是 FacemarkLBF 的参数结构体,可以自定义以下参数:

成员变量类型默认值含义
scale_factorfloat1.0f图像缩放因子,影响检测速度与精度
n_landmarksint68关键点数量(通常为 68)
n_treesint500使用的回归树数量
tree_depthint5每棵树的最大深度
valid_radiusfloat1.0f特征采样半径范围
oversampling_ceilint30过采样上限
use_eye_centersboolfalse是否使用眼睛中心作为初始点

示例代码


#include <opencv2/face.hpp>
#include <opencv2/opencv.hpp>using namespace cv;
using namespace cv::face;
using namespace std;int main()
{// 加载 Haar 分类器CascadeClassifier faceCascade( "haarcascade_frontalface_default.xml" );if ( faceCascade.empty() ){cerr << "无法加载 Haar 分类器!" << endl;return -1;}// 创建 FacemarkLBF 实例Ptr< FacemarkLBF > facemark = FacemarkLBF::create();facemark->loadModel( "lbfmodel.yaml" );// 加载图像Mat img = imread( "/media/dingxin/data/study/OpenCV/sources/images/Lenna.png" );if ( img.empty() ){cerr << "图像加载失败!" << endl;return -1;}Mat gray;cvtColor( img, gray, COLOR_BGR2GRAY );// 检测人脸vector< Rect > faces;faceCascade.detectMultiScale( gray, faces, 1.1, 3, 0, Size( 100, 100 ) );if ( faces.empty() ){cout << "未检测到人脸。" << endl;return -1;}// ✅ 改为二维向量存储关键点vector< vector< Point2f > > landmarks;// 拟合关键点if ( facemark->fit( img, faces, landmarks ) ){// 遍历每个人脸的关键点集合并绘制for ( const auto& face_landmarks : landmarks ){for ( const auto& point : face_landmarks ){circle( img, point, 2, Scalar( 0, 255, 0 ), FILLED );}}imshow( "Facial Landmarks", img );waitKey( 0 );}else{cout << "未能拟合面部关键点。" << endl;}return 0;
}

运行结果

在这里插入图片描述

http://www.lryc.cn/news/582073.html

相关文章:

  • 使用ansible的角色实现批量安装nginx服务
  • 图像处理基础:镜像、缩放与矫正
  • 《声音的变形记:Web Audio API的实时特效法则》
  • 【论文撰写】如何把AI生成的文本公式复制在word中,完整的复制公式,拷贝豆包生成的公式
  • 音频流媒体技术选型指南:从PCM到Opus的实战经验
  • 在linux 上使用tcpdump监听http 端口的报文并分析
  • C++之string类的实现代码及其详解(中)
  • 项目中多个模块都需要引入外部jar
  • Spring Boot项目初始化:官方与阿里云服务地址对比指南
  • ExcelJS 完全指南:专业级Excel导出解决方案
  • vue3 字符包含
  • 暑假Python基础整理 -- Python语言基础
  • 初识Neo4j之Cypher(三)
  • 企业级视频链接的技术实现与安全性策略
  • [免费]基于Python豆瓣电影数据分析及可视化系统(Flask+echarts+pandas)【论文+源码+SQL脚本】
  • 部署NextCloud AIO + Frp + nginx-proxy-manager内网穿透私有云服务
  • 微算法科技(NASDAQ: MLGO)探索Grover量子搜索算法,利用量子叠加和干涉原理,实现在无序数据库中快速定位目标信息的效果。
  • web网页开发,在线%ctf管理%系统,基于html,css,webform,asp.net mvc, sqlserver, mysql
  • 前端篇——HTML知识点体系
  • 报错 400 和405解决方案
  • 回溯题解——电话号码的字母组合【LeetCode】
  • Word 怎么让段落对齐,行与行之间宽一点?
  • VBA之Word应用第三章第十一节:Document对象的事件
  • GIC控制器(二)
  • iOS App抓包工具排查后台唤醒引发请求异常
  • ShortGPT: Layers in Large Language Models are More Redundant Than You Expect
  • DPDK 网络驱动 之 UIO
  • Linux之Shell脚本--遍历数组
  • PostgreSQL中的HASH分区:原理、实现与最佳实践
  • 多模态数据集转换与MMIB模型应用:从图像到文本的跨模态分析