【C++】相機標定源碼筆記- 立體視覺相機的校準和圖像矯正類

類主要用于雙目相機的標定和矯正。它包含了讀取和保存相機模型、計算標定參數以及矯正圖像的功能。通過這些功能,可以實現雙目相機的標定和矯正,從而提高雙目相機的精度和穩定性。

公有函數:?構造函數、帶參構造函數、析構函數、讀取雙目相機模型、保存雙目相機模型、計算雙目相機標定參數、矯正圖像。

公有變量:左右相機的內參、雙目相機的標定參數包括旋轉矩陣、平移向量、本質矩陣、基礎矩陣、矯正矩陣和投影矩陣等。

私有變量:?是否加載了雙目相機模型、左右相機的圖像點、物體點、有效區域、圖像大小、重投影誤差、是否已經生成矯正map、左右相機的Mat數組。

------------------函數------------------

默認構造函數:初始化矯正標志為假,初始化模型加載標志為假。

帶參數的構造函數:初始化矯正標志為假,讀取雙目相機模型。

析構函數:空。

讀取雙目相機模型:檢查文件名是否為.yml結尾,打開文件,讀取文件中的參數(圖像尺寸、旋轉矩陣、平移向量、本質矩陣、基礎矩陣、第一個相機的矯正旋轉矩陣、第二個相機的矯正旋轉矩陣、第一個相機的投影矩陣、第二個相機的投影矩陣、讀取重投影矩陣、讀取做相機的有效區域、讀取右相機的有效區域。)初始化相機內參:將雙目模型加載標志設為真、初始化左相機的內參類實例、檢查左相機是否已標定、初始化右相機的內參、檢查右相機是否已標定、返回雙目模型和左右相機內參是否成功加載。

保存立體模型參數文件:檢查文件名是否為.yml結尾,打開文件,保存參數到文件。返回true。

計算立體標定參數:檢查左右相機檢測結果數量是否一致,獲取檢測結果數量,獲取圖像尺寸,開始立體校準。?定義左相機棋盤格完整角點集,右相機棋盤格角點集。定義左右相機角點計數,遍歷所有圖像獲取左/右相機角點{ 如果檢測結果為真則添加圖像角點到 左/右側相機圖像角點集合,否則添加空向量到角點集合?}。??定義左右相機棋盤格非空角點集合,找出在同一幀左右角點對。獲取有效的角點對數量。?定義世界坐標系下的角點,進行雙目相機標定,計算重投影誤差。輸出重投影誤差。進行雙目相機矯正,輸出左右相機的有效區域。

cv::stereoCalibrate

65dee7a3eebaf85161c7803e2be23fd5.png

92ab92c6bdd8f2910216c70f4da87a94.png

cv::stereoRectify

8ac131286baf61f48304b5e7c55db7de.png

3d72d0e33577c337dd7e6fdf4a7a0f28.png

圖像立體矯正?檢查是否已經初始化了矯正映射(輸出做相機的內參矩陣和畸變系數,輸出做相機的矯正變換矩陣和投影矩陣,輸出圖像尺寸,輸出有相機的內參矩陣和畸變系數,輸出有相機的矯正變換矩陣和投影矩陣,輸出圖像尺寸, 初始化左相機的矯正映射,初始化有相機的矯正映射,設置標志表示矯正映射已經初始化)。?應用矯正映射到做相機圖像,應用矯正映射到右相機圖像。?如果需要顯示校正后的圖像(創建一個畫布,用于顯示左右圖像,定義畫布的左半部分,定義畫布的右半部分,創建顯示窗口,將矯正后的左圖像復制到畫布的左半部分,將矯正后的右圖像復制到畫布的右半部分。在畫布上繪制綠色的水平線,用于檢查矯正效果。顯示校正后的圖像,等待用戶按鍵。?),返回true。

cv::remap

ea0ac40978ad2c5c94f42800ae63bc47.png

本質矩陣 vs 基礎矩陣

1a7882b382af6fd7856010437447a677.png

使用雙目相機進行三維重建的pipeline

820c1b8f95ca4cc28f8e51b3c0a6250d.png

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/40162.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/40162.shtml
英文地址,請注明出處:http://en.pswp.cn/web/40162.shtml

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

相關文章

摩斯邀您參加“WAIC 2024世界人工智能大會”

2024世界人工智能大會暨人工智能全球治理高級別會議(簡稱“WAIC 2024”)將于7月在上海世博中心、世博展覽館舉行,論壇時間為7月4日-6日,展覽時間為7月5日-7日。大會展覽面積超5.2萬平方米,重點圍繞核心技術、智能終端、…

STM32要學到什么程度才算合格?

在開始前剛好我有一些資料,是我根據網友給的問題精心整理了一份「嵌入式的資料從專業入門到高級教程」, 點個關注在評論區回復“888”之后私信回復“888”,全部無償共享給大家!!! STM32 這玩意兒要學到啥…

今天聊聊AI

AI是在幫助開發者還是取代他們? 在軟件開發領域,生成式人工智能(AIGC)正在改變開發者的工作方式。無論是代碼生成、錯誤檢測還是自動化測試,AI工具正在成為開發者的得力助手。然而,這也引發了對開發者職業…

vscode 前行復制到下一行

目錄 這個技巧也比較多 選擇 python解釋器 F1 Ctrl Shift P 跳轉上一次編輯 下一次編輯 Ctrl d 會把當前行復制到下一行 步驟1:打開鍵綁定設置 使用VS Code設置換行 這個技巧也比較多 VS Code技巧匯總_vs code反縮進-CSDN博客 選擇 python解釋器 F1 Ctrl Shi…

Java中如何使用 tesseract-ocr 進行圖片文字提取(tesseract、tesseract訓練自己的字庫)

tesseract下載鏈接: github:https://github.com/tesseract-ocr/ db:https://digi.bib.uni-mannheim.de/tesseract/ 文字識別技術在許多領域都有廣泛的應用,例如文檔處理、自動化辦公、移動設備上的文本輸入等。而Tesseract-OCR作…

Python推導式寫出簡潔高效的代碼方法詳解

概要 推導式是Python中一種非常強大的語法特性,允許你用簡潔的語法創建列表、字典、集合等數據結構。使用推導式不僅可以讓代碼更加簡潔和易讀,還能提高代碼的執行效率。本文將詳細介紹Python中的各種推導式,并提供相應的示例代碼,幫助全面掌握這一強大的工具。 列表推導式…

【前端項目筆記】9 數據報表

數據報表 效果展示: 在開發代碼之前新建分支 git checkout -b report 新建分支report git branch 查看分支 git push -u origin report 將本地report分支推送到云端origin并命名為report 通過路由的形式將數據報表加載到頁面中 渲染數據報表基本布局 面包屑導航…

數據洞察:從零到一的數據倉庫與Navicat連接全攻略【實訓Day04】[完結篇]

一、數據分析 1 實現數據倉庫(在hadoop101上) 1) 創建jobdata數據庫 # cd $HIVE_HOME # bin/hive hive>create database jobdata; hive>use jobdata; 2) 創建原始職位數據事實表ods_jobdata_orgin(在hadoop101上) create table ods_jobdata_origin( city string CO…

Keepalived+LVS實現負責均衡,高可用的集群

Keepalived的設計目標是構建高可用的LVS負載均衡群集,可以調用ipvsadm工具來創建虛擬服務器,管理服務器池,而不僅僅用作雙機熱備。使用Keepalived構建LVS群集更加簡便易用,主要優勢體現在:對LVS負責調度器實現熱備切換…

配置并調試后端程序(sql)

1.環境準備 安裝VS Code和Node.js插件:確保你已經安裝了VS Code和Node.js插件。創建launch.json文件:在你的項目中創建一個.vscode文件夾,并在其中創建launch.json文件。添加以下內容: {"version": "0.2.0"…

uniapp 數據父傳子

文章目錄 可能出現的問題 在uni-app中,父組件向子組件傳遞數據主要通過屬性綁定的方式實現。這里提供一個簡單的示例來說明如何進行父傳子的數據傳遞: 父組件 準備數據: 在父組件的data中定義要傳遞的數據。 export default {data() {return {parentMe…

@ControllerAdice統一返回值類型【Spring源碼學習】

我們可以通過在ControllerAdvice注解類上實現ResponseBodyAdvice注解來實現統一返回值類型&#xff1b; 例如統一接口的返回類型為Result類 ControllerAdvice static class MyControllerAdvice implements ResponseBodyAdvice<Object> {Overridepublic boolean supports…

PLC基礎知識

1.PLC中的數據寄存器地址D表示存數據的地方。 2.PLC的物理存儲器的規定&#xff1a;PLC存儲器以字節為單位&#xff08;Byte&#xff09;&#xff0c;存儲單元以位&#xff08;Bit&#xff09;、字節&#xff08;B&#xff0c;8Bit&#xff09;、字&#xff08;W&#xff0c;1…

谷歌優化師招聘網站:夢想啟航的舞臺,實現職業理想的起點

尊敬的夢想實踐者們&#xff0c;歡迎您走進谷歌優化師招聘網站這個充滿魔力的領域。這里不僅是一個招聘平臺&#xff0c;更是您實現職業理想的起點&#xff0c;激發熱情的舞臺。現在&#xff0c;請做好準備&#xff0c;與我們共同揭開這個神秘世界的面紗&#xff01; 夢想啟航…

電子行業MES系統解決方案

工業4.0時代的工業自動化&#xff0c;將在原有自動化技術和架構下&#xff0c;實現集中式控制向分散式增強型控制的基本模式轉變&#xff0c;讓設備從傳感器到因特網的通訊能夠無縫對接&#xff0c;從而建立一個高度靈活的、個性化和數字化、融合了產品與服務的生產模式。在這種…

上海市計算機學會競賽平臺2022年11月月賽丙組染色問題

題目描述 &#x1d45b;n 個點排成一列&#xff0c;需要給每個點一個顏色&#xff0c;顏色有 &#x1d45a;m 種。請問有多少種方法&#xff0c;能使任意相鄰兩個點的顏色均不相同&#xff1f; 輸入格式 兩個整數&#xff1a;表示 &#x1d45b;n 與 &#x1d45a;m 輸出格…

【控制Android.bp的編譯】

1.首先Android.bp的語法是不支持if 條件語句的 2.查到可以用enabled來控制Android.bp中的模塊是否參與編譯&#xff0c;但是并不能實現動態的控制&#xff0c;比如你需要根據獲取到的安卓版本來控制一個Android.bp是否編譯&#xff0c;是無法做到的。enabled只能是固定的true或…

spark shuffle寫操作——BypassMergeSortShuffleWriter

創建分區文件writer 每一個分區都生成一個臨時文件&#xff0c;創建DiskBlockObjectWriter對象&#xff0c;放入partitionWriters 分區writer寫入消息 遍歷所有消息&#xff0c;每一條消息都使用分區器選擇對應分區的writer然后寫入 生成分區文件 將分區writer的數據flu…

Java中初始化一個List的多種方式

1.最原始的方式&#xff1a;先創建&#xff0c;然后再添加元素 List<String> list new ArrayList<>(); list.add("apple"); list.add("banana"); list.add("cherry");2.使用Arrays.asList 這是一種快速方便的方式&#xff0c;直接…

從海上長城到數字防線:視頻技術在海域邊防現代化中的創新應用

隨著全球化和科技發展的加速&#xff0c;海域安全問題日益凸顯其重要性。海域邊防作為國家安全的第一道防線&#xff0c;其監控和管理面臨著諸多挑戰。近年來&#xff0c;視頻技術的快速發展為海域邊防場景提供了新的解決方案&#xff0c;其高效、實時、遠程的監控特點極大地提…