OpenCV相机标定与3D重建(7)鱼眼镜头立体校正的函数stereoRectify()的使用

  • 操作系统:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 编程语言:C++11

算法描述

cv::fisheye::stereoRectify 是 OpenCV 中用于鱼眼镜头立体校正的函数。该函数计算两个相机之间的校正变换,使得从两个相机拍摄的图像中的对应点在行上对齐。这一步骤对于后续的立体匹配和深度估计非常重要。

函数原型

void cv::fisheye::stereoRectify
(InputArray 	K1,InputArray 	D1,InputArray 	K2,InputArray 	D2,const Size & 	imageSize,InputArray 	R,InputArray 	tvec,OutputArray 	R1,OutputArray 	R2,OutputArray 	P1,OutputArray 	P2,OutputArray 	Q,int 	flags,const Size & 	newImageSize = Size(),double 	balance = 0.0,double 	fov_scale = 1.0 
)		

参数

  • 参数K1: 第一个相机的内参矩阵。
  • 参数D1: 第一个相机的畸变参数。
  • 参数K2: 第二个相机的内参矩阵。
  • 参数D2: 第二个相机的畸变参数。
  • 参数imageSize: 用于立体标定的图像尺寸。
  • 参数R: 第一和第二个相机坐标系之间的旋转矩阵。
  • 参数tvec: 相机坐标系之间的平移向量。
  • 参数R1: 输出第一个相机的3x3校正变换(旋转矩阵)。
  • 参数R2: 输出第二个相机的3x3校正变换(旋转矩阵)。
  • 参数P1: 在新的(校正后的)坐标系统中,输出第一个相机的3x4投影矩阵。
  • 参数P2: 在新的(校正后的)坐标系统中,输出第二个相机的3x4投影矩阵。
  • 参数Q: 输出4×4的视差到深度映射矩阵(见 reprojectImageTo3D 函数)。
  • 参数flags: 操作标志,可以是0或 fisheye::CALIB_ZERO_DISPARITY。如果设置了该标志,函数将使每个相机的主点在校正后的视图中具有相同的像素坐标。如果没有设置该标志,函数可能仍然会在水平或垂直方向上移动图像(取决于极线的方向),以最大化有用的图像区域。
  • 参数newImageSize: 校正后的新图像分辨率。应将相同的大小传递给 initUndistortRectifyMap(参见OpenCV示例目录中的 stereo_calib.cpp)。当传递 (0,0) 时(默认值),它被设置为原始的 imageSize。将其设置为更大的值可以帮助你保留原始图像中的细节,特别是在存在较大径向畸变的情况下。
  • 参数balance: 设置新的焦距范围在最小焦距和最大焦距之间。平衡值在 [0, 1] 范围内。
  • 参数fov_scale: 新焦距的除数。

代码示例


#include <opencv2/opencv.hpp>
#include <iostream>int main() {// 相机内参矩阵 K1 和 K2cv::Mat K1 = (cv::Mat_<double>(3, 3) << 458.654, 0, 367.215, 0, 457.296, 248.375, 0, 0, 1);cv::Mat K2 = (cv::Mat_<double>(3, 3) << 458.654, 0, 367.215, 0, 457.296, 248.375, 0, 0, 1);// 畸变系数 D1 和 D2cv::Mat D1 = (cv::Mat_<double>(1, 4) << 0.0695303, -0.160713, -0.00480225, 0.000911994);cv::Mat D2 = (cv::Mat_<double>(1, 4) << 0.0695303, -0.160713, -0.00480225, 0.000911994);// 图像尺寸cv::Size imageSize(720, 576);// 旋转矩阵 R 和平移向量 tveccv::Mat R = (cv::Mat_<double>(3, 3) << 1, 0, 0, 0, 1, 0, 0, 0, 1); // 示例数据cv::Mat tvec = (cv::Mat_<double>(3, 1) << 0.1, 0.05, 0.02); // 示例数据// 输出的校正旋转矩阵cv::Mat R1, R2;// 输出的投影矩阵cv::Mat P1, P2;// 输出的重投影矩阵cv::Mat Q;// 进行立体校正cv::fisheye::stereoRectify(K1, D1, K2, D2,imageSize, R, tvec,R1, R2, P1, P2, Q,cv::CALIB_ZERO_DISPARITY,imageSize, 0.0, 1.0);// 打印结果std::cout << "R1: " << std::endl << R1 << std::endl;std::cout << "R2: " << std::endl << R2 << std::endl;std::cout << "P1: " << std::endl << P1 << std::endl;std::cout << "P2: " << std::endl << P2 << std::endl;std::cout << "Q: " << std::endl << Q << std::endl;return 0;
}

运行结果

R1: 
[0.8804509063256238, 0.4402254531628119, 0.1760901812651247;-0.4402254531628119, 0.8969404364876068, -0.04122382540495731;-0.1760901812651247, -0.04122382540495731, 0.9835104698380172]
R2: 
[0.8804509063256238, 0.4402254531628119, 0.1760901812651247;-0.4402254531628119, 0.8969404364876068, -0.04122382540495731;-0.1760901812651247, -0.04122382540495731, 0.9835104698380172]
P1: 
[463.3157037596288, 0, 216.7917896240862, 0;0, 463.3157037596288, 262.3111277744742, 0;0, 0, 1, 0]
P2: 
[463.3157037596288, 0, 216.7917896240862, 52.62254833641767;0, 463.3157037596288, 262.3111277744742, 0;0, 0, 1, 0]
Q: 
[1, 0, 0, -216.7917896240862;0, 1, 0, -262.3111277744742;0, 0, 0, 463.3157037596288;0, 0, -8.804509063256239, 0]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/62690.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C与指针。

目录 1_指针理解 1.1变量的值 1.2变量的地址 1.3指针 1.4取变量的地址 2_分析指针 2.1分析指针变量的要素 2.2根据需求定义指针变量 3_指针的使用 3.1指针对变量的读操作 3.2指针对变量的写操作 4_指针占用空间的大小与位移 4.1指针占用空间的大小 4.2指针的位移…

单片机学习笔记 15. 串口通信(理论)

更多单片机学习笔记&#xff1a;单片机学习笔记 1. 点亮一个LED灯单片机学习笔记 2. LED灯闪烁单片机学习笔记 3. LED灯流水灯单片机学习笔记 4. 蜂鸣器滴~滴~滴~单片机学习笔记 5. 数码管静态显示单片机学习笔记 6. 数码管动态显示单片机学习笔记 7. 独立键盘单片机学习笔记 8…

树莓派5+文心一言 -> 智能音箱

一、简介 效果&#xff1a;运行起来后&#xff0c;可以连续对话 硬件&#xff1a;树莓派5、麦克风、音箱&#xff0c;成本500-1000 软件&#xff1a;snowboy作为唤醒词、百度语音作为语音识别、brain作为指令匹配、百度文心一言作为对话模块、微软的edge-tts语音合成... 二…

SAP SD学习笔记17 - 投诉处理3 - Credit/Debit Memo依赖,Credit/Debit Memo

上一章讲了 请求书&#xff08;发票&#xff09;的取消。 SAP SD学习笔记16 - 请求书的取消 - VF11-CSDN博客 再往上几章&#xff0c;讲了下图里面的返品传票&#xff1a; SAP SD学习笔记14 - 投诉处理1 - 返品处理&#xff08;退货处理&#xff09;的流程以及系统实操&#…

Linux服务器使用JupyterLab

一、JupyterLab的配置 1. conda配置 自行搜索conda安装与配置。 2. 环境创建 &#xff08;1&#xff09;创建环境 conda create -n jupyter python3.10&#xff08;2&#xff09;激活环境 conda activate jupyter&#xff08;3&#xff09;安装jupyter包 pip install -i…

Flutter:页面滚动

1、单一页面&#xff0c;没有列表没分页的&#xff0c;推荐使用&#xff1a;SingleChildScrollView() return Scaffold(backgroundColor: Color(0xffF6F6F6),body: SingleChildScrollView(child: _buildView()) );2、列表没分页&#xff0c;如购物车页&#xff0c;每个item之间…

使用GitZip for github插件下载git仓库中的单个文件

背景&#xff1a;git仓库不知道抽什么疯&#xff0c;下载不了单个文件&#xff0c;点击下载没有反应&#xff0c;遂找寻其他方法&#xff0c;在这里简单记录下。 使用GitZip for github插件下载仓库中的单个文件 1、首先在浏览器安装插件&#xff0c;并确保为打开状态。 2、然…

Unet改进57:在不同位置添加SFHF

本文内容:在不同位置添加CBAM注意力机制 论文简介 由于恶劣的大气条件或独特的降解机制,自然图像会遭受各种退化现象。这种多样性使得为各种恢复任务设计一个通用框架具有挑战性。现有的图像恢复方法没有探索不同退化现象之间的共性,而是侧重于在有限的恢复先验下对网络结构…

数据结构(初阶7)---七大排序法(堆排序,快速排序,归并排序,希尔排序,冒泡排序,选择排序,插入排序)(详解)

排序 1.插入排序2.希尔排序3.冒泡排序4.选择排序(双头排序优化版)5.堆排序6.快速排序1). 双指针法2).前后指针法3).非递归法 7.归并排序1).递归版本(递归的回退就是归并)2).非递归版本(迭代版本) 计算机执行的最多的操作之一就有排序&#xff0c;排序是一项极其重要的技能 接下…

DataWhale—PumpkinBook(TASK07支持向量机)

课程开源地址及相关视频链接&#xff1a;&#xff08;当然这里也希望大家支持一下正版西瓜书和南瓜书图书&#xff0c;支持文睿、秦州等等致力于开源生态建设的大佬✿✿ヽ(▽)ノ✿&#xff09; Datawhale-学用 AI,从此开始 【吃瓜教程】《机器学习公式详解》&#xff08;南瓜…

【Python数据分析五十个小案例】使用自然语言处理(NLP)技术分析 Twitter 情感

博客主页&#xff1a;小馒头学python 本文专栏: Python爬虫五十个小案例 专栏简介&#xff1a;分享五十个Python爬虫小案例 项目简介 什么是情感分析 情感分析&#xff08;Sentiment Analysis&#xff09;是文本分析的一部分&#xff0c;旨在识别文本中传递的情感信息&…

【数据结构与算法】排序算法(上)——插入排序与选择排序

文章目录 一、常见的排序算法二、插入排序2.1、直接插入排序2.2、希尔排序( 缩小增量排序 ) 三、选择排序3.1、直接选择排序3.2、堆排序3.2.1、堆排序的代码实现 一、常见的排序算法 常见排序算法中有四大排序算法&#xff0c;第一是插入排序&#xff0c;二是选择排序&#xff…

Educator头歌:离散数学 - 图论

第1关&#xff1a;图的概念 任务描述 本关任务&#xff1a;学习图的基本概念&#xff0c;完成相关练习。 相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a;图的概念。 图的概念 1.一个图G是一个有序三元组G<V,R,ϕ>&#xff0c;其中V是非空顶点集合&am…

oracle RAC各版本集群总结和常用命令汇总

oracle RAC学习 RAC介绍 RAC&#xff1a;高可用集群&#xff0c;负载均衡集群&#xff0c;高性能计算集群 RAC是⼀种⾼可⽤&#xff0c;⾼性能&#xff0c;负载均衡的share-everything的集群 8i:内存融合雏形 内存融合雏形&#xff08;Oracle Parallel Server&#xff09;…

数据资产管理是什么?为什么重要?核心组成部分(分类分级、登记追踪、质量管理、安全合规)、实施方法、未来趋势、战略意义

文章目录 一、引言&#xff1a;数据的新时代二、什么是数据资产管理&#xff1f;2.1 定义2.2 核心功能 三、为什么数据资产管理至关重要&#xff1f;3.1 面对的数据管理挑战 四、数据资产管理的核心组成部分4.1 数据分类与分级4.2 数据资产登记与追踪4.3 数据质量管理4.4 数据安…

C++高阶算法[汇总]

&#xff08;一&#xff09;高精度算法概述 高精度算法是指能够处理超出常规数据类型表示范围的数值的算法。在 C 中&#xff0c;标准数据类型通常有固定的位数和精度限制&#xff0c;而高精度算法可以解决大数运算、金融计算和科学计算等领域的问题。 &#xff08;二&#x…

springboot365高校疫情防控web系统(论文+源码)_kaic

毕 业 设 计&#xff08;论 文&#xff09; 题目&#xff1a;高校疫情防控的设计与实现 摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为…

Electron实现打开子窗口加载vue路由指定的组件页面白屏

白屏有两种情况&#xff1a; Vue项目使用的history路由的话就会显示空白&#xff0c;加载不出来路由&#xff0c;也不能跳转路由 这种情况看我上一篇文章Electron vue3 打包之后不能跳转路由-CSDN博客 Electron中已经能正常加载页面跳转路由&#xff0c;但是创建子窗口加载子页…

智能探针技术:实现可视、可知、可诊的主动网络运维策略

网络维护的重要性 网络运维是确保网络系统稳定、高效、安全运行的关键活动。在当今这个高度依赖信息技术的时代&#xff0c;网络运维的重要性不仅体现在技术层面&#xff0c;更关乎到企业运营的方方面面。网络运维具有保障网络的稳定性、提升网络运维性能、降低企业运营成本等…

泷羽sec-shell脚本(全) 学习笔记

声明&#xff01; 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章&#xff0c;笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人以及泷羽sec团队无关&a…