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]
相关文章:
OpenCV相机标定与3D重建(7)鱼眼镜头立体校正的函数stereoRectify()的使用
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 cv::fisheye::stereoRectify 是 OpenCV 中用于鱼眼镜头立体校正的函数。该函数计算两个相机之间的校正变换,使得从两个相机拍摄的图像…...
前端如何获取unpkg的资源链接
在现代前端开发中,快速获取和使用npm包是一个常见需求。unpkg是一个全球性的CDN服务,它为npm上的每个包提供了快速访问。通过unpkg,你可以轻松地通过URL获取任何npm包的文件。本文将介绍如何获取unpkg的资源链接。 unpkg简介 unpkg是一个快…...
Flink 离线计算
文章目录 一、样例一:读 csv 文件生成 csv 文件二、样例二:读 starrocks 写 starrocks三、样例三:DataSet、Table Sql 处理后写入 StarRocks四、遇到的坑 <dependency><groupId>org.apache.flink</groupId><artifactId&…...

Git | 理解团队合作中Git分支的合并操作
合并操作 团队合作中Git分支的合并操作分支合并过程1.创建feature/A分支的过程2. 创建分支feature/A-COPY3.合并分支查看代码是否改变 团队合作中Git分支的合并操作 需求 假设团队项目中的主分支是main,团队成员A基于主分支main创建了feature/A,而我又在团队成员A创…...
C++多态的实现原理
【欢迎关注编码小哥,学习更多实用的编程方法和技巧】 1、类的继承 子类对象在创建时会首先调用父类的构造函数 父类构造函数执行结束后,执行子类的构造函数 当父类的构造函数有参数时,需要在子类的初始化列表中显式调用 Child(int i) : …...

[极客大挑战 2019]PHP--详细解析
信息搜集 想查看页面源代码,但是右键没有这个选项。 我们可以ctrlu或者在url前面加view-source:查看: 没什么有用信息。根据页面的hint,我们考虑扫一下目录看看能不能扫出一些文件. 扫到了备份文件www.zip,解压一下查看网站源代码…...

map用于leetcode
//第一种map方法 function groupAnagrams(strs) {let map new Map()for (let str of strs) {let key str ? : str.split().sort().join()if (!map.has(key)) {map.set(key, [])}map.get(key).push(str)} //此时map为Map(3) {aet > [ eat, tea, ate ],ant > [ tan,…...
CommonJS 和 ES Modules 的 区别
CommonJS 和 ES Modules 的 区别 1. CommonJS 和 ES Modules 区别?1.1 语法差异CommonJS:ES Modules: 1.2. 加载机制CommonJS:ES Modules: 1.3. 运行时行为CommonJS:ES Modules: 1.4. 兼容性和使用场景Com…...

科技为翼 助残向新 高德地图无障碍导航规划突破1.5亿次
今年12月03日是第33个国际残疾人日。在当下科技发展日新月异的时代,如何让残障人士共享科技红利、平等地参与社会生活,成为当前社会关注的热点。 中国有超过8500万残障人士,其中超过2400万为肢残人群,视力障碍残疾人数超过1700万…...

Flink四大基石之Time (时间语义) 的使用详解
目录 一、引言 二、Time 的分类及 EventTime 的重要性 Time 分类详述 EventTime 重要性凸显 三、Watermark 机制详解 核心原理 Watermark能解决什么问题,如何解决的? Watermark图解原理 举例 总结 多并行度的水印触发 Watermark代码演示 需求 代码演示ÿ…...
Spring WebFlux与Spring MVC
Spring WebFlux 是对 Spring Boot 项目中传统 Spring MVC 部分的一种替代选择,主要是为了解决现代 Web 应用在高并发和低延迟场景下的性能瓶颈。 1.WebFlux 是对 Spring MVC 的替代 架构替代: Spring MVC 使用的是基于 Servlet 规范的阻塞式模型…...

【深度学习基础】一篇入门模型评估指标(分类篇)
🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀深度学习_十二月的猫的博客-CSDN博客 💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 目录 1. 前言 2. 模…...
D80【 python 接口自动化学习】- python基础之HTTP
day80 requests请求加入headers 学习日期:20241126 学习目标:http定义及实战 -- requests请求加入headers 学习笔记: requests请求加入headers import requestsurlhttps://movie.douban.com/j/search_subjects params{"type":…...

⽂件操作详解
⽬录 一 文件操作的引入 1 为什么使⽤⽂件? 2 什么是⽂件? 3 文件分类(1 从⽂件功能的⻆度来分类:程序⽂件/数据⽂件 2根据数据的组织形式:为⽂本⽂件/⼆进制⽂件) 二 ⽂件的打开和关闭 1 …...

双高(高比例新能源发电和高比例电力电子设备)系统宽频振荡研究现状
1 为什么会形成双高电力系统 (1)新能源发电比例增加 双碳计划,新能源革命,可再生能源逐步代替传统化石能源,未来新能源发电将成为最终能源需求的主要来源。 (2)电力电子设备数量增加 为了实…...

TorchMoji使用教程/环境配置(2024)
TorchMoji使用教程/环境配置(2024) TorchMoji简介 这是一个基于pytorch库,用于将文本分类成不同的多种emoji表情的库,适用于文本的情感分析 配置流程 从Anaconda官网根据提示安装conda git拉取TorchMoji git clone https://gi…...

使用 Python 中的 TripoSR 根据图像创建 3D 对象
使用 Python 中的 TripoSR 根据图像创建 3D 对象 1. 效果图2. 步骤图像到 3D 对象设置环境导入必要的库设置设备创建计时器实用程序上传并准备图像处理输入图像生成 3D 模型并渲染下载.stl 文件展示结果3. 源码4. 遇到的问题及解决参考这篇博客将引导如何使用Python 及 TripoSR…...
Spring 框架中AOP(面向切面编程)和 IoC(控制反转)
在 Spring 框架中,AOP(面向切面编程)和 IoC(控制反转)是两个核心概念,它们分别负责不同的功能。下面我将通过通俗易懂的解释来帮助你理解这两个概念。 IoC(控制反转) IoC 是 Inver…...
电机瞬态分析基础(7):坐标变换(3)αβ0变换,dq0变换
1. 三相静止坐标系与两相静止坐标系的坐标变换―αβ0坐标变换 若上述x、y坐标系在空间静止不动,且x轴与A轴重合,即,如图1所示,则为两相静止坐标系,常称为坐标系,考虑到零轴分量,也称为αβ0坐标…...

Open3D (C++) 生成任意3D椭圆点云
目录 一、算法原理1、几何参数2、数学公式二、代码实现三、结果展示一、算法原理 1、几何参数 在三维空间中,椭圆由以下参数定义: 椭圆中心点 c = ( x 0 , y 0 , z...

python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命
在华东塑料包装行业面临限塑令深度调整的背景下,江苏艾立泰以一场跨国资源接力的创新实践,重新定义了绿色供应链的边界。 跨国回收网络:废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点,将海外废弃包装箱通过标准…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

多种风格导航菜单 HTML 实现(附源码)
下面我将为您展示 6 种不同风格的导航菜单实现,每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...
稳定币的深度剖析与展望
一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...
力扣-35.搜索插入位置
题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...

【7色560页】职场可视化逻辑图高级数据分析PPT模版
7种色调职场工作汇报PPT,橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版:职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...
《C++ 模板》
目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板,就像一个模具,里面可以将不同类型的材料做成一个形状,其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式:templa…...

算法:模拟
1.替换所有的问号 1576. 替换所有的问号 - 力扣(LeetCode) 遍历字符串:通过外层循环逐一检查每个字符。遇到 ? 时处理: 内层循环遍历小写字母(a 到 z)。对每个字母检查是否满足: 与…...