美文网首页
ORB-SLAM2代码笔记(六):Convert

ORB-SLAM2代码笔记(六):Convert

作者: liampayne_66d0 | 来源:发表于2019-07-26 12:17 被阅读0次

    Converter

    • vector<cv::Mat> Converter::toDescriptorVector(const cv::Mat &Descriptors)描述子转换为描述子向量
      就是把矩阵变成向量,向量每个元素是矩阵的行。
    for (int j=0;j<Descriptors.rows;j++)
            vDesc.push_back(Descriptors.row(j));
    
    • g2o::SE3Quat Converter::toSE3Quat(const cv::Mat &cvT)将变换矩阵转换为李代数
      将旋转矩阵和平移向量提取出来 然后换成g2o::SE3Quat类型并返回
    • g2o::SE3Quat->cv::Mat
      cv::Mat Converter::toCvMat(const g2o::SE3Quat &SE3)李代数se3转换为变换矩阵
    • cv::Mat Converter::toCvMat(const g2o::Sim3 &Sim3)将Sim3变成矩阵
    • cv::Mat Converter::toCvMat(const Eigen::Matrix<double,4,4> &m)
      这里就把Eigen::Matrix转成了cv::Mat
    • cv::Mat Converter::toCvMat(const Eigen::Matrix3d &m) Eigen::Matrix3d 转成 cv::Mat
    • cv::Mat Converter::toCvMat(const Eigen::Matrix<double,3,1> &m)
      Eigen::Matrix<double,3,1>转成 cv::Mat
    • cv::Mat Converter::toCvSE3(const Eigen::Matrix<double,3,3> &R, const Eigen::Matrix<double,3,1> &t)
      就是给定R和t转换成变换矩阵(李群)
        for(int i=0;i<3;i++)
        {
            for(int j=0;j<3;j++)
            {
                cvMat.at<float>(i,j)=R(i,j);
            }
        }
        for(int i=0;i<3;i++)
        {
            cvMat.at<float>(i,3)=t(i);
        }
        return cvMat.clone();
    

    Eigen::Matrix<double,3,3> Converter::toMatrix3d(const cv::Mat &cvMat3)
    cv::Mat转成Eigen::Matrix<double,3,3>
    采用下面的赋值方法

        //生成用于存储转换结果的变量
        Eigen::Matrix<double,3,3> M;
    //然后也就是相当赋值转换了  
        M << cvMat3.at<float>(0,0), cvMat3.at<float>(0,1), cvMat3.at<float>(0,2),
             cvMat3.at<float>(1,0), cvMat3.at<float>(1,1), cvMat3.at<float>(1,2),
             cvMat3.at<float>(2,0), cvMat3.at<float>(2,1), cvMat3.at<float>(2,2);
        //返回转换结果
        return M;
    

    相关文章

      网友评论

          本文标题:ORB-SLAM2代码笔记(六):Convert

          本文链接:https://www.haomeiwen.com/subject/erprrctx.html