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

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

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

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

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

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

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

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

析构函数:空。

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

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

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

cv::stereoCalibrate

cv::stereoRectify

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

cv::remap

本质矩阵 vs 基础矩阵

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

相关推荐
xing25168 分钟前
pytest下allure
开发语言·python·pytest
眸笑丶12 分钟前
使用 Python 调用 Ollama API 并调用 deepseek-r1:8b 模型
开发语言·python
enyp8033 分钟前
Qt QStackedWidget 总结
开发语言·qt
gu201 小时前
c#编程:学习Linq,重几个简单示例开始
开发语言·学习·c#·linq
lly2024061 小时前
SQLite 删除表
开发语言
wjs20241 小时前
HTML 字符实体
开发语言
二十雨辰1 小时前
[Java基础]网络编程
java·开发语言
cookies_s_s1 小时前
Linux--进程(进程虚拟地址空间、页表、进程控制、实现简易shell)
linux·运维·服务器·数据结构·c++·算法·哈希算法
AC使者1 小时前
介绍 TensorFlow 的基本概念和使用场景。
开发语言·自然语言处理·sqlite·github
不想编程小谭2 小时前
力扣LeetCode: 2506 统计相似字符串对的数目
c++·算法·leetcode