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

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

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

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

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

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

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

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

析构函数:空。

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

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

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

cv::stereoCalibrate

cv::stereoRectify

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

cv::remap

本质矩阵 vs 基础矩阵

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

相关推荐
笑鸿的学习笔记23 分钟前
虚幻引擎5-Unreal Engine笔记之`GameMode`、`关卡(Level)` 和 `关卡蓝图(Level Blueprint)`的关系
笔记·ue5·虚幻
脚大江山稳27 分钟前
二进制与十进制互转的方法
c++
shykevin4 小时前
python开发Streamable HTTP MCP应用
开发语言·网络·python·网络协议·http
我不是程序猿儿4 小时前
【C#】 lock 关键字
java·开发语言·c#
漫路在线5 小时前
JS逆向-某易云音乐下载器
开发语言·javascript·爬虫·python
小辉懂编程5 小时前
C语言:51单片机实现数码管依次循环显示【1~F】课堂练习
c语言·开发语言·51单片机
醍醐三叶6 小时前
C++类与对象--2 对象的初始化和清理
开发语言·c++
向上的车轮7 小时前
MATLAB学习笔记(七):MATLAB建模城市的雨季防洪排污的问题
笔记·学习·matlab
Magnum Lehar7 小时前
3d游戏引擎EngineTest的系统实现3
java·开发语言·游戏引擎
躺着听Jay7 小时前
Oracle-相关笔记
数据库·笔记·oracle