前言
该部分函数在Tracking.cc源文件中定义,用于处理图像。
1.函数作用:
1.GrabImageStereo 函数的主要作用是处理输入的双目图像(左视图和右视图),进行必要的预处理(颜色转换),创建表示当前帧的对象,并执行跟踪操作,最后返回当前帧在世界坐标系下的变换矩阵。
cv::Mat Tracking::GrabImageStereo(const cv::Mat &imRectLeft, const cv::Mat &imRectRight, const double ×tamp)
{....
}
2.GrabImageRGBD函数的主要作用是处理输入的 RGB-D 图像,进行必要的预处理(颜色转换、深度格式转换),创建表示当前帧的对象,并执行跟踪操作,最后返回当前帧在世界坐标系下的变换矩阵。
cv::Mat Tracking::GrabImageRGBD(const cv::Mat &imRGB,const cv::Mat &imD, const double ×tamp)
{....
}
3. GrabImageMonocular 函数的主要作用是处理输入的单目图像,进行必要的预处理(颜色转换),根据系统状态创建表示当前帧的对象,并执行跟踪操作,最后返回当前帧在世界坐标系下的变换矩阵。
cv::Mat Tracking::GrabImageMonocular(const cv::Mat &im, const double ×tamp)
{....
}
2.具体代码(以RGBD的为例)
cv::Mat Tracking::GrabImageRGBD(const cv::Mat &imRGB,const cv::Mat &imD, const double ×tamp)
{// 将传入的参数赋值给该函数的内部变量,用于进行数据处理。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();
}