ORB-SLAM2源码学习:Tracking.cc:GrabImageStereo、GrabImageRGBD、GrabImageMonocular处理图像

news/2025/2/10 11:21:54/

前言

该部分函数在Tracking.cc源文件中定义,用于处理图像。

1.函数作用:

1.GrabImageStereo 函数的主要作用是处理输入的双目图像(左视图和右视图),进行必要的预处理(颜色转换),创建表示当前帧的对象,并执行跟踪操作,最后返回当前帧在世界坐标系下的变换矩阵。

cv::Mat Tracking::GrabImageStereo(const cv::Mat &imRectLeft, const cv::Mat &imRectRight, const double &timestamp)
{....
}

2.GrabImageRGBD函数的主要作用是处理输入的 RGB-D 图像,进行必要的预处理(颜色转换、深度格式转换),创建表示当前帧的对象,并执行跟踪操作,最后返回当前帧在世界坐标系下的变换矩阵。

cv::Mat Tracking::GrabImageRGBD(const cv::Mat &imRGB,const cv::Mat &imD, const double &timestamp)
{....
}

3. GrabImageMonocular 函数的主要作用是处理输入的单目图像,进行必要的预处理(颜色转换),根据系统状态创建表示当前帧的对象,并执行跟踪操作,最后返回当前帧在世界坐标系下的变换矩阵。

cv::Mat Tracking::GrabImageMonocular(const cv::Mat &im, const double &timestamp)
{....
}

2.具体代码(以RGBD的为例)

cv::Mat Tracking::GrabImageRGBD(const cv::Mat &imRGB,const cv::Mat &imD, const double &timestamp)
{// 将传入的参数赋值给该函数的内部变量,用于进行数据处理。mImGray = imRGB;// 将输入的RGB图像赋值给mImGray(类成员变量CV:Mat)。cv::Mat imDepth = imD;// 将输入的深度图像复制到imDepth。//根据输入图像的通道数,确定其是RGB(3 通道)还是RGBA(4 通道)。if(mImGray.channels()==3){// 如果是RGB,则RGB转灰度,如果是BGR,则BGR转灰度。if(mbRGB)// 头文件中定义的布尔变量mbRGB。如果 mbRGB为true,则说明图像是以RGB格式存储。cvtColor(mImGray,mImGray,CV_RGB2GRAY);//将原来的RGB图像转换成灰度图在存放到原变量中。// cvtColor 是 OpenCV 库中的一个函数,用于在不同的颜色空间之间转换图像。// CV_RGB2GRAY 是 OpenCV 定义的常量,表示 RGB 到灰度的转换方式。elsecvtColor(mImGray,mImGray,CV_BGR2GRAY);}// 同理如上。else if(mImGray.channels()==4){if(mbRGB)cvtColor(mImGray,mImGray,CV_RGBA2GRAY);elsecvtColor(mImGray,mImGray,CV_BGRA2GRAY);}// 检查绝对值是否大于某个特定值或者检查imDepth的数据类型是否为 CV_32Fif((fabs(mDepthMapFactor-1.0f)>1e-5) || imDepth.type()!=CV_32F)//浮点数类型成员函数mDepthMapFactor。// fabs()函数用于计算浮点数的绝对值。// 如果条件不成立则需要将深度图像imDepth转换为 32 位浮点格式imDepth.convertTo(imDepth,CV_32F,mDepthMapFactor);// 计算当前帧。mCurrentFrame = Frame(mImGray,imDepth,timestamp,mpORBextractorLeft,mpORBVocabulary,mK,mDistCoef,mbf,mThDepth);Track();// 返回mCurrentFrame中的mTcw(当前帧相对于世界坐标系的变换矩阵),并使用clone()方法返回其副本,确保外部调用者不直接修改mTcw。return mCurrentFrame.mTcw.clone();
}


http://www.ppmy.cn/news/1570849.html

相关文章

react使用if判断

1、第一种 function Dade(req:any){console.log(req)if(req.data.id 1){return <span>66666</span>}return <span style{{color:"red"}}>8888</span>}2、使用 {win.map((req,index) > ( <> <Dade data{req}/>{req.id 1 ?…

【基于SprintBoot+Mybatis+Mysql】电脑商城项目之上传头像和新增收货地址

&#x1f9f8;安清h&#xff1a;个人主页 &#x1f3a5;个人专栏&#xff1a;【Spring篇】【计算机网络】【Mybatis篇】 &#x1f6a6;作者简介&#xff1a;一个有趣爱睡觉的intp&#xff0c;期待和更多人分享自己所学知识的真诚大学生。 目录 &#x1f680;1.上传头像 -持久…

Leetcode 3449. Maximize the Minimum Game Score

Leetcode 3449. Maximize the Minimum Game Score 1. 解题思路2. 代码实现 题目链接&#xff1a;3449. Maximize the Minimum Game Score 1. 解题思路 这一题思路上就是一个二分法&#xff0c;尝试各个score&#xff0c;看看是否可以满足在给定的m次操作限制下&#xff0c;使…

2025年终总结

文章目录 前言2024年回顾1月2月4月5月6月7月8月10月12月 2025年 回顾1月2月 2025年期望 前言 最近因为一些原因&#xff0c;暂停了博客的书写。但是毕竟到年底了&#xff0c;还是简单作个总结好了。 2024年回顾 1月 回家之后。我堂哥找我聊天&#xff0c;说要一起开网店&am…

如何使用deepseek开发一个翻译API

什么是deepseek Deepseek 是一个基于人工智能技术的自然语言处理平台&#xff0c;提供了多种语言处理能力&#xff0c;包括文本翻译、语义分析、情感分析等。它通过深度学习模型和大规模语料库训练&#xff0c;能够实现高质量的文本翻译和多语言理解。Deepseek 的核心优势在于…

Ranger 2.1.0 Admin安装

个人博客地址&#xff1a;Ranger 2.1.0 Admin安装 | 一张假钞的真实世界 Creating MySQL user ranger2 failed 2021-07-01 18:44:53,480 [E] Creating MySQL user ranger2 failed.. 2021-07-01 18:44:53,496 [E] DB schema setup failed! Please contact Administrator. 原…

leetcode_深度搜索和广度搜索 101. 对称二叉树

101. 对称二叉树 给你一个二叉树的根节点 root &#xff0c; 检查它是否轴对称思路: 1.判断根节点的左右子树是否为空, 若都为空则返回True2.根节点的左右子树其中之一为空或子树的根节点的值不同则返回False3.分别判断根节点左右子树是否相同, 判断时, 左边子树的左节点要对应…

【Mysql】数据表的增删查改(基础)

1.❤️❤️前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; Hello, Hello~ 亲爱的朋友们&#x1f44b;&#x1f44b;&#xff0c;这里是E绵绵呀✍️✍️。 如果你喜欢这篇文章&#xff0c;请别吝啬你的点赞❤️❤️和收藏&#x1f4d6;&#x1f4d6;。如果你对我的…