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

OpenCV结构光三维重建类cv::structured_light::GrayCodePattern

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

算法描述

cv::structured_light::GrayCodePattern 是 OpenCV 库中用于结构光三维重建 的一个类,属于 OpenCV 的 structured_light 模块。
它用于生成和解码 格雷码(Gray Code) 图案,广泛应用于 3D 扫描、深度重建、物体表面形状获取等领域。

主要功能

  • 生成一组黑白格雷码图像(水平 + 垂直)
  • 对相机拍摄的变形格雷码图像进行解码
  • 输出每个像素的“水平”和“垂直”编码值(即像素在投影图案中的唯一编码)
  • 可用于计算相机与投影仪之间的像素对应关系(correspondence)

常用成员函数

函数说明
static Ptr create(Size size);创建一个格雷码图案生成器,size 是投影图像的分辨率(如 1024x768)
bool generate(std::vector& pattern);生成格雷码图案序列,输出为一组二值图像(黑白)
bool decode(InputArrayOfArrays patternImages, OutputArray disparity, InputArrayOfArrays whiteImages=noArray(), InputArrayOfArrays blackImages=noArray(), InputArray mask=noArray());解码拍摄的格雷码图像序列,输出视差图(disparity)或编码图
int getWidth() const;获取图案宽度
int getHeight() const;获取图案高度

使用流程(典型结构光系统)

一个典型的 结构光 3D 扫描系统 包括:

  • 一台 投影仪(Projector):投射格雷码图案
  • 一台 相机(Camera):拍摄被物体变形后的图案
  • 一台 计算机:运行 OpenCV 处理图像

步骤:

  • 生成格雷码图案
cv::Ptr<cv::structured_light::GrayCodePattern> grayPattern = cv::structured_light::GrayCodePattern::create(cv::Size(1024, 768));std::vector<cv::Mat> patternImages;
grayPattern->generate(patternImages);  // 生成 ~20 张黑白图像
  • 依次投影图案,并用相机拍摄

    • 投影第 i 张图 → 相机拍摄第 i 张变形图 → 存入 capturedImages[i]
  • 解码拍摄的图像

cv::Mat disparity;
bool success = grayPattern->decode(capturedImages, disparity);
if (success) {
// disparity 包含每个像素的水平编码值(可用于 3D 重建)
}

  • 结合相机标定、投影仪标定,计算三维点云

📌 注意事项

  • disparity 图实际上是 水平方向的编码值,类似于“相位”,可用于匹配相机和投影仪的像素。
  • 通常还需要配合 正弦条纹(Phase Shift) 方法进行亚像素级精度提升。
  • structured_light 模块在 OpenCV 3.0+ 引入,需编译时启用 opencv_contrib 模块。
  • 必须安装 opencv-contrib,否则无法使用该类!

应用场景

  • 工业零件三维扫描
  • 人脸识别与建模
  • 医疗三维成像
  • 虚拟现实内容生成

示例代码

#include <opencv2/opencv.hpp>
#include <opencv2/structured_light.hpp>int main()
{int width    = 1024;int height   = 768;auto pattern = cv::structured_light::GrayCodePattern::create( width, height );std::vector< cv::Mat > images;pattern->generate( images );// 保存所有图案for ( size_t i = 0; i < images.size(); ++i ){cv::imwrite( "pattern_" + std::to_string( i ) + ".png", images[ i ] );}return 0;
}

运行结果

在这里插入图片描述

http://www.dtcms.com/a/342011.html

相关文章:

  • 01 网络信息内容安全--绪论
  • OpenCV图像色彩空间转换
  • OpenCV图像形态学操作
  • SigNoz 外置 ClickHouse 高可用部署实践
  • Qt二维码生成器项目开发教程 - 从零开始构建专业级QR码生成工具
  • AI + 云原生 + ITSM 的三重融合:企业数字化转型的新引擎
  • Azure官网为何没直接体现专业服务
  • unity之物体旋转
  • 使用 queryParameters:参数,拦截到所有mars3d的网络请求
  • PPIO首发上线DeepSeek-V3.1,Agent 能力大幅提升
  • 驱动-在自定义总线上创建驱动-分析驱动注册流程
  • Linux笔记---策略模式与日志
  • Neovim clangd LSP 配置出现 “attempt to call field ‘ge‘”
  • [论文阅读] 人工智能 + 软件工程 | 当AI成为文学研究员:Agentic DraCor如何用MCP解锁戏剧数据分析
  • 短视频矩阵管理软件推荐:小麦矩阵系统全面解析
  • AR技术:重塑汽车制造的未来
  • B站视频字幕提取-为学习所用
  • java中ReentrantLock使用公平锁相关问题
  • 河南萌新联赛2025第(六)场:郑州大学补题
  • 分享一个基于Python与spark大数据的护肤品市场用户行为分析与可视化平台,基于hadoop的护肤品使用行为追踪与分析可视化平台的设计与实现
  • uniapp vue3 ts自定义底部 tabbar菜单
  • FPGA DP1.4 With DSC解决方案
  • IE启动时主页被360守护了想变回去怎么办?
  • Spring Boot + Spring AI 最小可运行 Demo
  • TensorFlow深度学习实战(33)——深度确定性策略梯度
  • 【知识储备】PyTorch / TensorFlow 和张量的联系
  • 29、工业网络威胁检测与响应 (IDS 模拟) - /安全与维护组件/industrial-network-ids
  • C# OpencvSharp获取Astra Pro奥比中光深度相机深度图
  • AXI GPIO S——ZYNQ学习笔记10
  • 基于OpenCV的物体识别与计数