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

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

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

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

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

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

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

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

析构函数:空。

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

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

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

cv::stereoCalibrate

cv::stereoRectify

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

cv::remap

本质矩阵 vs 基础矩阵

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

相关推荐
Bunny_Ben几秒前
理解机器学习中的潜在空间(Understanding Latent Space in Machine Learning)
人工智能·笔记·深度学习·神经网络·机器学习
会编程的果子君5 分钟前
人工智能系列-Python面向对象编程
开发语言·python
枫yy25 分钟前
C++入门 容器适配器 / stack && queue模拟实现
开发语言·c++
AlexMercer101228 分钟前
【Python】列表
开发语言·网络·windows·笔记·python
计算机周老师28 分钟前
java-Linkedlist源码分析
java·开发语言·python
骑驴闯天涯34 分钟前
JAVA学习笔记-JAVA基础语法-DAY24-Stream流、方法引用
笔记·学习
金融小白数据分析之路1 小时前
python自动移除excel文件密码(升级v2版本)
开发语言·python·excel
fensioakq—qqq1 小时前
Spring框架的学习SpringMVC(1)
java·开发语言·后端·学习·spring
倾听一世,繁花盛开1 小时前
Java语言程序设计——篇二(1)
java·开发语言·eclipse
中草药z1 小时前
【Java算法】二分查找 上
数据结构·笔记·算法·leetcode·二分查找·学习方法