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.pswp.cn/news/919981.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/919981.shtml
英文地址,請注明出處:http://en.pswp.cn/news/919981.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

變頻器實習DAY35 引腳電平測試 退耦電阻

目錄變頻器實習DAY35一、工作內容1.1 硬性平臺RO7測試二、學習內容2.1 退耦電阻核心原理&#xff1a;2大特性抑制干擾四大關鍵作用選型&#xff1a;4個核心參數典型應用場景四大常見誤區附學習參考網址歡迎大家有問題評論交流 (* ^ ω ^)變頻器實習DAY35 一、工作內容 1.1 硬性…

C++標準庫算法:從零基礎到精通

算法庫的核心理念與設計哲學 C標準庫算法的設計遵循著一個令人稱道的哲學&#xff1a;算法與容器的分離。這種設計并非偶然&#xff0c;而是經過深思熟慮的結果。傳統的面向對象設計可能會將排序功能綁定到特定的容器類中&#xff0c;但C標準庫卻選擇了一條更加優雅的道路——…

為什么存入數據庫的中文會變成亂碼

從產生、傳輸、處理到最終存儲的整個生命周期中采用統一且正確的字符集編碼。具體原因紛繁復雜&#xff0c;主要歸結為&#xff1a;客戶端操作系統或應用與數據庫服務端字符集編碼不一致、Web應用服務器到數據庫驅動的連接層編碼配置缺失或錯誤、數據庫本身及其表、字段各層級的…

13種常見機器學習算法面試總結(含問題與優質回答)

目錄 1. K近鄰&#xff08;K-NN&#xff09; 2. 線性回歸&#xff08;一元/多元&#xff09; 3. 邏輯回歸 4. 決策樹 5. 集成學習之隨機森林 6. 貝葉斯&#xff08;樸素/高斯&#xff09; 7. SVM&#xff08;支持向量機&#xff09; 8. K-means聚類 9. DBSCAN 10. TF-…

sfc_os!SfcValidateFileSignature函數分析之WINTRUST!SoftpubLoadMessage

第一部分&#xff1a;0: kd> kc# 00 WINTRUST!SoftpubLoadMessage 01 WINTRUST!_VerifyTrust 02 WINTRUST!WinVerifyTrust 03 sfc_os!SfcValidateFileSignature 04 sfc_os!SfcGetValidationData 05 sfc_os!SfcValidateDLL 06 sfc_os!SfcQueueValidationThread 07 kernel32!B…

python寫上位機并打包250824

1.python寫的串口上位機軟件程序 import serial import serial.tools.list_ports import tkinter as tk from tkinter import ttk, scrolledtext, messagebox, filedialog import threading import time from datetime import datetime class SerialPortAssistant: def init(se…

Wagtail CRX 簡介

Wagtail CRX&#xff08;前身為 CodeRed CMS&#xff0c;由 CodeRed Corp 開發&#xff09;是一個基于 Wagtail 的 CMS 擴展包&#xff0c;主要用于快速構建營銷型網站&#xff0c;提供預置組件和增強功能。最新版本為 5.0.1&#xff08;發布于 2025 年 5 月 9 日&#xff09;。…

docker compose 安裝zabbix 7

docker compose 安裝zabbix 7 1.環境 # hostnamectlStatic hostname: ky10Icon name: computer-vmChassis: vmMachine ID: f554764e21b74c2fa057d9aaa296af63Boot ID: 4c155f0185c24a14970ab5ea60de34f4Virtualization: vmwareOperating System: Kylin Linux Advanced Server…

EtherCAT的幾種郵箱通信介紹

1. COE&#xff08;CANopen over EtherCAT&#xff09;技術特點&#xff1a;直接復用 CANopen 的對象字典&#xff08;Object Dictionary&#xff09;機制&#xff0c;通過 EtherCAT 的郵箱通信實現非周期性數據交換&#xff0c;同時支持過程數據對象&#xff08;PDO&#xff0…

【Java】springboot的自動配置

如果你用過 Spring Boot&#xff0c;一定對 “引入依賴就能用” 的體驗印象深刻 —— 加個spring-boot-starter-web就有了 Web 環境&#xff0c;這個是 SpringBoot 的自動裝配&#xff08;Auto-Configuration&#xff09;機制。自動裝配的核心注解自動裝配的邏輯看似復雜&#…

高通機型QPST平臺線刷教程 線刷全分區 只通過引導文件提取單分區 寫入單分區

高通芯片機型刷機平臺很多&#xff0c;除過一些廠家專用的平臺外。qpst是高通芯片類通用刷寫平臺。其操作簡單 可以刷寫完整固件。也可以通過單個引導文件來讀取 提取整個分區。而且包含讀寫基帶qcn等等的一些功能。 qpst工具下載 QPST 的不同版本可在多個開源平臺或技術論壇中…

ES_預處理

1. 預處理的核心概念&#xff1a;什么是 Ingest Pipeline&#xff1f; 想象一下數據進入 Elasticsearch 的旅程。原始數據&#xff08;Raw Data&#xff09;往往并不完美&#xff1a;格式可能混亂&#xff0c;字段可能缺失&#xff0c;或者需要被豐富和轉換后才能發揮最大的價值…

我從零開始學習C語言(15)- 基本類型 PART2

開始學習第七章其余部分。7.3.4 轉義序列正如在前面示例中見到的那樣&#xff0c;字符常量通常是用單引號括起來的單個字符。然而&#xff0c;一些特殊符號&#xff08;比如換行符&#xff09;是無法采用上述方式書寫的&#xff0c;因為它們不可見&#xff08;非打印字符&#…

K8S的部署與常用管理

一、k8s的部署 1.1.集群環境初始化 1.1.1.所有主機禁用swap [rootk8s- ~]# systemctl mask dev-nvme0n1p3.swap [rootk8s- ~]# swapoff -a [rootk8s- ~]# systemctl status dev-nvme0n1p3.swap [rootk8s- ~]# vim /etc/fstab 內容&#xff1a; 注釋swap 1.1.2.安裝k8s部署工…

2025年機械工程與自動化技術國際會議(ICMEAT 2025)

2025年機械工程與自動化技術國際會議&#xff08;ICMEAT 2025&#xff09; 2025 International Conference on Mechanical Engineering and Automation Technology一、大會信息會議簡稱&#xff1a;ICMEAT 2025 大會地點&#xff1a;中國杭州 審稿通知&#xff1a;投稿后2-3日內…

高數 不定積分(4-3):分部積分法

文章目錄寫在前面分部積分法&#x1f615; 一個小問題? 分部積分法是怎么來的&#xff1f;&#x1f330; 幾個小例子? 最終總結&#xff01;后話寫在前面 文章傳送門&#xff1a;高數 不定積分&#xff08;4-2&#xff09;&#xff1a;換元積分法 今天再更一篇:) 上篇文章&…

Chrome/360 瀏覽器 WebUI 資源底層機制解析:共享資源與專屬資源的奧秘

在 Chromium 和 360 瀏覽器源碼中&#xff0c;我們會發現 WebUI 頁面不僅有 C 邏輯處理&#xff08;如 WebUIMessageHandler&#xff09;&#xff0c;還伴隨著大量 HTML、CSS 和 JS 文件。尤其是 src/ui/webui/resources 和 src/chrome/browser/360/webui 這兩個目錄&#xff0…

基于springboot的高校后勤保修服務系統/基于android的高校后勤保修服務系統app

基于springboot的高校后勤保修服務系統/基于android的高校后勤保修服務系統app

Qt QML 用Q_PROPERTY快捷訪問c++屬性

在之前我寫過如何調用函數&#xff0c;當時的屬性都是手搓的&#xff0c;也就是自己寫成員變量、變化信號和讀寫函數&#xff0c;但其實有一個很便捷的方法&#xff0c;即使用Q_PROPERTY&#xff0c;下面給出標準結構&#xff1a;Q_PROPERTY(數據類型 變量名 READ 變量名 WRITE…

ubuntu中網卡的 IP 及網關配置設置為永久生效

要將 Ubuntu 中 ens33 和 ens36 網卡的 IP 及網關配置設置為永久生效&#xff08;重啟后不丟失&#xff09;&#xff0c;需通過 netplan 配置并禁用 cloud-init 對網絡的干擾&#xff08;避免重啟后配置被覆蓋&#xff09;&#xff0c;具體步驟如下&#xff1a;一、最終的永久生…