【C++】相机标定源码笔记- 立体视觉相机的校准和图像矫正类

类主要用于双目相机的标定和矫正。它包含了读取和保存相机模型、计算标定参数以及矫正图像的功能。通过这些功能,可以实现双目相机的标定和矫正,从而提高双目相机的精度和稳定性。

公有函数: 构造函数、带参构造函数、析构函数、读取双目相机模型、保存双目相机模型、计算双目相机标定参数、矫正图像。

公有变量: 左右相机的内参、双目相机的标定参数包括旋转矩阵、平移向量、本质矩阵、基础矩阵、矫正矩阵和投影矩阵等。

私有变量: 是否加载了双目相机模型、左右相机的图像点、物体点、有效区域、图像大小、重投影误差、是否已经生成矫正map、左右相机的Mat数组。

------------------函数------------------

默认构造函数:初始化矫正标志为假,初始化模型加载标志为假。

带参数的构造函数:初始化矫正标志为假,读取双目相机模型。

析构函数:空。

读取双目相机模型:检查文件名是否为.yml结尾,打开文件,读取文件中的参数(图像尺寸、旋转矩阵、平移向量、本质矩阵、基础矩阵、第一个相机的矫正旋转矩阵、第二个相机的矫正旋转矩阵、第一个相机的投影矩阵、第二个相机的投影矩阵、读取重投影矩阵、读取做相机的有效区域、读取右相机的有效区域。)初始化相机内参:将双目模型加载标志设为真、初始化左相机的内参类实例、检查左相机是否已标定、初始化右相机的内参、检查右相机是否已标定、返回双目模型和左右相机内参是否成功加载。

保存立体模型参数文件:检查文件名是否为.yml结尾,打开文件,保存参数到文件。返回true。

**计算立体标定参数:**检查左右相机检测结果数量是否一致,获取检测结果数量,获取图像尺寸,开始立体校准。 定义左相机棋盘格完整角点集,右相机棋盘格角点集。定义左右相机角点计数,遍历所有图像获取左/右相机角点{ 如果检测结果为真则添加图像角点到 左/右侧相机图像角点集合,否则添加空向量到角点集合 }。 定义左右相机棋盘格非空角点集合,找出在同一帧左右角点对。获取有效的角点对数量。 定义世界坐标系下的角点,进行双目相机标定,计算重投影误差。输出重投影误差。进行双目相机矫正,输出左右相机的有效区域。

cv::stereoCalibrate

cv::stereoRectify

图像立体矫正 检查是否已经初始化了矫正映射(输出做相机的内参矩阵和畸变系数,输出做相机的矫正变换矩阵和投影矩阵,输出图像尺寸,输出有相机的内参矩阵和畸变系数,输出有相机的矫正变换矩阵和投影矩阵,输出图像尺寸, 初始化左相机的矫正映射,初始化有相机的矫正映射,设置标志表示矫正映射已经初始化)。 应用矫正映射到做相机图像,应用矫正映射到右相机图像。 如果需要显示校正后的图像(创建一个画布,用于显示左右图像,定义画布的左半部分,定义画布的右半部分,创建显示窗口,将矫正后的左图像复制到画布的左半部分,将矫正后的右图像复制到画布的右半部分。在画布上绘制绿色的水平线,用于检查矫正效果。显示校正后的图像,等待用户按键。 ),返回true。

cv::remap

本质矩阵 vs 基础矩阵

使用双目相机进行三维重建的pipeline

相关推荐
史蒂芬_丁2 分钟前
Qt, C++数据类型扩展问题
数据库·c++·qt
6Hzlia10 分钟前
【Hot 100 刷题计划】 LeetCode 118. 杨辉三角 | C++ 动态规划题解
c++·leetcode·动态规划
ZhiqianXia18 分钟前
gem5 模拟器学习笔记(1):核心术语整理
笔记·学习
三道渊38 分钟前
C语言:文件I/O
c语言·开发语言·数据结构·c++
hnlgzb40 分钟前
安卓app kotlin语法,Hilt是什么东西?
android·开发语言·kotlin
没用的阿_吉1 小时前
windows10 Qt5.15.14 msvc2019 编译部署
开发语言·qt
聊聊MES那点事1 小时前
JavaScript图表控件AG Charts使用教程:使用AG Charts React实时更新柱状图
开发语言·javascript·react.js·图表控件
ywf12151 小时前
Go基础之环境搭建
开发语言·后端·golang
凌波粒1 小时前
D2L学习笔记:安装、张量与数据处理
笔记·python·学习·pandas
taoqick2 小时前
FIPO粗读笔记
笔记