opencv - viz 画出SLAM轨迹

2023-05-16

原文在这里

数据集格式为:时间+平移+旋转矩阵四元数。

#include<opencv2/opencv.hpp>

#include<fstream>
#include<iostream>
#include<vector>
#include<Eigen/Geometry>
#include<Eigen/Core>

using namespace std;
using namespace cv;



int main()
{
    ifstream fin("KeyFrameTrajectory.txt");
    if (!fin)
    {
        cerr << "error in openning the file !" << endl;
        return 0;
    }

    // visualization
    cv::viz::Viz3d vis("Visual Odometry");
    cv::viz::WCoordinateSystem world_coor(1.0), camera_coor(0.5);
    vis.setBackgroundColor(cv::viz::Color::black());

    // draw the trace
    int i = 0;
    Point3d point_begin(0.0, 0.0, 0.0);
    Point3d point_end;

    //cv::viz::WLine wline(cv::Point3f(0, 0, 0), (100, 100, 100), cv::Scalar(0, 0, 255));
    cv::Point3d cam_pos(0, -1.0, -1.0), cam_focal_point(0, 0, 0), cam_y_dir(0, 1, 0);
    cv::Affine3d cam_pose = cv::viz::makeCameraPose(cam_pos, cam_focal_point, cam_y_dir);
    vis.setViewerPose(cam_pose);

    world_coor.setRenderingProperty(cv::viz::LINE_WIDTH, 2.0);
    camera_coor.setRenderingProperty(cv::viz::LINE_WIDTH, 1.0);
    vis.showWidget("World", world_coor);
    vis.showWidget("Camera", camera_coor);

    vector<int> count_color;
    vector<Eigen::Isometry3d, Eigen::aligned_allocator<Eigen::Isometry3d>> poses;
    vector<vector<double>> vecs;
    for (int i = 0;; i++)
    {
        if (fin.eof())
        {
            cout << "read over " << endl;
            break;
        }

        vector<double> vec(8,0); //获取每行数据
        for (auto & d : vec)
        {
            fin >> d;//双向影响
        }
        vecs.push_back(vec);
    }
    if (false)
    {
        for (int j = 0; j < vecs.size(); j++)
        {
            for (int i = 1; i < 8; i++)// 获取位姿
            {
                cout << vecs[j][i] << "  ";
            }
            cout << endl;
        }
    }
    
    
    for (int j = 0; j < vecs.size(); j++)
    {
        Eigen::Quaterniond q(vecs[j][7], vecs[j][4], vecs[j][5], vecs[j][6]);
        Eigen::Isometry3d T(q);
        T.pretranslate(Eigen::Vector3d(vecs[j][1], vecs[j][2], vecs[j][3]));
        poses.push_back(T);
        cv::Affine3d M(
            cv::Affine3d::Mat3(
                T(0, 0), T(0, 1), T(0, 2),
                T(1, 0), T(1, 1), T(1, 2),
                T(2, 0), T(2, 1), T(2, 2)
            ),
            cv::Affine3d::Vec3(
                T.translation()(0, 0), 
                T.translation()(1, 0),
                T.translation()(2, 0)
            )
        );
        //cout << "x = " << T.translation()(0, 0) << " z = " << T.translation()(1, 0) << endl;
        
        //*******************************************************************************************
        // 画出轨迹
        //*******************************************************************************************
        vector<cv::viz::WLine> lines; 
        point_end = Point3d( // 更新终点
            T.translation()(0, 0),
            T.translation()(1, 0),
            T.translation()(2, 0)
            );

        viz::WLine line(point_begin, point_end, cv::viz::Color::green());
        lines.push_back(line); //收集  第一个 line 到 当前line
        // 每个循环 画出 第一个 line 到 当前line
        for (vector<cv::viz::WLine>::iterator iter = lines.begin(); iter != lines.end(); iter++)
        {
            string id = to_string(i);
            vis.showWidget(id, *iter);
            i++;
        }
        point_begin = point_end; // 更新 起始点

        vis.setWidgetPose("Camera", M);
        vis.spinOnce(1, false);
    }
    vis.saveScreenshot("KeyFrameTrajectory.png");
    return 1;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

opencv - viz 画出SLAM轨迹 的相关文章

  • 使用 openCV 和 python 检测物体

    我正在尝试使用 OpenCV 和 Python 检测下图中的白点 我尝试使用函数 cv2 HoughCircles 但没有成功 我需要使用不同的方法吗 这是我的代码 import cv2 cv import numpy as np impo
  • opencv中矩阵的超快中值(与matlab一样快)

    我正在 openCV 中编写一些代码 想要找到一个非常大的矩阵数组 单通道灰度 浮点数 的中值 我尝试了几种方法 例如对数组进行排序 使用 std sort 和选择中间条目 但与 matlab 中的中值函数相比 它非常慢 准确地说 在 ma
  • 相机标定(OpenCV 2.3)-如何使用畸变参数?

    我有一组带有一些附加标记的刚体图像 我在这些标记之一中定义了一个原点坐标系 我想获得该坐标系与在相机原点定义的坐标系之间的旋转和平移 我尝试了一段时间 POSIT 以下this http goo gl cUYYt 但从未获得可接受的结果 直
  • Opencv matchTemplate 和 np.where():仅保留唯一值

    继带有马里奥硬币的 opencv 教程 https opencv python tutroals readthedocs io en latest py tutorials py imgproc py template matching p
  • 来自 OpenCV 的外部参数

    我正在使用 OpenCV 来校准立体相机对 我拍摄了各种校准照片 并且使用 cv2 calibrateCamera 对内在参数进行了令人满意的拟合 然而 目前尚不清楚如何获取外部参数 该函数仅返回cameraMatrix 尽管它很有用 但实
  • 使用opencv计算深度视差图

    我无法使用 opencv 从视差图计算深度 我知道两个立体图像中的距离是用以下公式计算的z baseline focal disparity p 但我不知道如何使用地图计算视差 我使用的代码如下 为我提供了两个图像的视差图 import n
  • Python中最相似的人脸识别

    如何使用Python和OpenCV来查找面部相似 我已成功使用 OpenCV 和 Python 使用 Haar Cascades 从多张照片中提取人脸 我现在有一个图像目录 所有这些都是不同人的面孔 我想做的是拍摄一张样本图像 然后看看它最
  • 如何将 mat 转换为 array2d

    我为dlib http dlib net face landmark detection ex cpp html那里的面部地标代码使用 array2d 来获取图像 但我喜欢使用 Mat 读取图像并转换为 array2d 因为 dlib 仅支
  • OpenCV 3 中的 FLANN 错误

    我运行的是 Ubuntu 14 04 我正在尝试使用 openCV 3 运行 FLANN 但出现错误 下面的所有内容都是通过使用 AKAZE 和 ORB 进行尝试的 但代码来自我尝试使用 ORB 的情况 我使用 ORB 来查找描述符和关键点
  • 指纹奇异点检测

    我正在尝试确定指纹的核心点和增量点 我正在使用庞加莱指数方法 但我无法成功检测到这一点 而且我不明白为什么 First I divide the image in 15x15 blocks then I calculate the x an
  • 仅获取图像中的外部轮廓

    我有这段代码 可以在图像中绘制轮廓 但我只需要外部轮廓 import cv2 import numpy as np camino C Users Usuario Documents Deteccion de Objetos 123 jpg
  • uri 警告中缺少端口:使用 Python OpenCV cv2.VideoCapture() 打开文件时出错

    当我尝试流式传输 ipcam 时 出现了如下所示的错误 tcp 000000000048c640 uri 中缺少端口 警告 打开文件时出错 build opencv modules videoio src cap ffmpeg impl h
  • 如何确定与视频中物体的距离?

    我有一个从行驶中的车辆前面录制的视频文件 我将使用 OpenCV 进行对象检测和识别 但我停留在一方面 如何确定距已识别物体的距离 我可以知道我当前的速度和现实世界的 GPS 位置 但仅此而已 我无法对我正在跟踪的对象做出任何假设 我计划用
  • 如何绘制更大的边界框和仅裁剪边界框文本 Python Opencv

    我正在使用 easyocr 来检测图像中的文本 该方法给出输出边界框 输入图像如下所示 Image 1 Image 2 使用下面的代码获得输出图像 But I want to draw a Single Bigger bounding bo
  • 如何将 Mat (opencv) 转换为 INDArray (DL4J)?

    我希望任何人都可以帮助我解决这个任务 我正在处理一些图像分类并尝试将 OpenCv 3 2 0 和 DL4J 结合起来 我知道DL4J也包含Opencv 但我认为它没什么用 谁能帮我 如何转换成 INDArray 我尝试阅读一些问题here
  • 同时从多个流中捕获、最佳方法以及如何减少 CPU 使用率

    我目前正在编写一个应用程序 该应用程序将捕获大量 RTSP 流 在我的例子中为 12 个 并将其显示在 QT 小部件上 当我超过大约 6 7 个流时 问题就会出现 CPU 使用率激增并且出现明显的卡顿 我认为它不是 QT 绘制函数的原因是因
  • cv2.VideoWriter:请求一个元组作为 Size 参数,然后拒绝它

    我正在使用 OpenCV 4 0 和 Python 3 7 创建延时视频 构造 VideoWriter 对象时 文档表示 Size 参数应该是一个元组 当我给它一个元组时 它拒绝它 当我尝试用其他东西替换它时 它不会接受它 因为它说参数不是
  • 是否可以在 PyScript 中使用 OpenCV 模块?

    我想使用 opencv 模块 但无法导入 OpenCV 那么我该如何解决这个问题呢 顺便说一句 Pyodide 支持 OpenCV 示例代码 https i stack imgur com ahwex jpg 尚不支持 OpenCV 此时O
  • 如何在 cv2.VideoWriter 中使用 FPS 参数?

    好的 所以我正在制作视频 我想确切地知道如何使用 FPS 参数 它是一个浮点数 所以我假设这是我想要的每帧之间的间隔 你能给个例子吗 我只想知道视频会如何随着 FPS 参数值的变化而变化 因为我制作的视频现在太快了 谢谢 确实只是这样 fr
  • 如何在 Qt 应用程序中通过终端命令运行分离的应用程序?

    我想使用命令 cd opencv opencv 3 0 0 alpha samples cpp cpp example facedetect lena jpg 在 Qt 应用程序中按钮的 clicked 方法上运行 OpenCV 示例代码

随机推荐

  • 时间划过的伤痕叫成长

    我要用代码敲出整个世界 也许刚看这句话的时候 很多人都嗤之以鼻 太自大太高傲了 但这是我梦想也是我目标 我出生在一个小县城的普通家庭里 经济状况也只能解决温饱 上高中的时候我就没想着要读大学 我很贪玩 几乎都是和一群 34 狐朋狗友 34
  • CMD终端中一些常用的快捷键

    1 使用键盘上的 xff0c 可以快速定位到上一次执行的命令 2 使用键盘上的tab键 xff0c 可以快速补全路径 3 使用键盘上的esc键 xff0c 能够快速清空当前已经输入的命令 4 输出cls命令 xff0c 可以清空终端
  • github在线简历

    github在线简历 对于找工作 xff0c 不论是对校招还是社招的来说 xff0c 在线简历这个东西还是比较加分的 xff0c 可以让hr和面试官 xff0c 看到你更多的东西 xff0c 比如你的个人项目之类的 xff0c 还是挺不错的
  • nrm ls不显示星号

    npmi切换依赖 xff0c 使用nrm ls命令查看当前下载以来的地址看不到是哪一个 nrm是什么 xff1a nrm 是npm常用镜像源管理工具 xff0c 方便本地切换npm的镜像源 xff0c 因为我们在安装依赖的时候 xff0c
  • npm i安装依赖报错,npm ERR! code EPERM npm ERR! syscall unlink,errno -4048

    我的项目是公司内网的react项目 xff0c 安装依赖的时候报错 xff0c 报错信息如下 解决方案 xff1a 1 删除 npmrc文件 他的位置不是nodejs安装目录npm模块下的那个npmrc文件 而是在C Users 账户 下的
  • element对话框遮罩层和弹出内容样式优先级错误

    代码 加入 append to body 61 34 true 34 就可以了 span class token operator lt span el span class token operator span dialog span
  • van2的弹窗自定义事件

    今天帮别人解决了一个移动端的van2的弹窗自定义事件就记录一下 现在国内开发大多数还是已vue为主 xff0c vue3已经比较火热 xff0c 但是对比vue2来讲 xff0c vue2更加稳定 xff0c 以及一些老项目还是用的vue2
  • svg图形绘画

    最近是在整理项目交接工作的时候 xff0c 把之前遇到的问题难点给找出来 xff0c 梳理一下 这个是做svg画布组态项目遇到的问题 目前组态项目中是使用ts文件 xff0c 定义组态类型和格式 xff0c 将不同的组件渲染在画布以及列表上
  • 基于Spring接口,集成Caffeine+Redis两级缓存

    原创 xff1a 微信公众号 码农参上 xff0c 欢迎分享 xff0c 转载请保留出处 在上一篇文章Redis 43 Caffeine两级缓存 xff0c 让访问速度纵享丝滑中 xff0c 我们介绍了3种整合Caffeine和Redis作
  • 不需要登录的app业务如何记录用户状态

    可以采用app获取设备号并服务端保存设备信息和业务信息的方式 欢迎加入我的QQ技术交流群425783133
  • web前端基础-给td设置宽度

    在实际需求中 xff0c 经常遇到要在table中的td中 xff0c 让用户输入比较长的字符串 xff0c 这时就要使td的宽度能较大 在WEB前端中 xff0c 对于 表格元素中的元素td 直接设置宽度是无法生效的 要想达到给td设置宽
  • Kali Linux 暴力破解 wifi密码

    Kali Linux 暴力破解 wifi密码 注意 xff1a 私自破解他人WiFi属于违法行为 xff0c 我这里使用自己的WiFi热点作为学习和测试 明白了破解原理就知道应该怎么防范了 前期准备 暴力破解需要准备的工具 xff1a ka
  • Docker安装与使用

    Docker安装与使用 介绍容器 xff1a 为什么需要Docker xff1f Docker 的用途 xff1a 特点 xff1a Docker安装Linux下安装 xff1a Windows 下安装 xff1a Docker的架构镜像
  • 前端PHP项目部署后404

    问题 xff1a php项目部署后 xff0c 首页可正常访问 xff0c 但跳转其他页面均为404 xff0c 经查询有以下原因 文件以及文件夹权限错误nginx配置错误 span class token comment 无效404方式
  • VINS-Mono 代码详细解读——初始化1:视觉SFM详解 processImage()+initialStructure()

    Estimator类 目录 processImage 函数 initialStructure 初始化函数 SFM初始化 relativePose 函数 getCorresponding 函数返回两帧匹配特征点3D坐标 solveRelati
  • VINS-Mono 代码详细解读——IMU预积分的残差、Jacobian和协方差 processIMU()+intergrationBase类+imu_factor.h

    前言 xff1a 对第k帧和第k 43 1帧之间所有的IMU进行积分 xff0c 可得到第K 43 1帧的PVQ xff08 位置 速度 旋转 xff09 xff0c 作为视觉估计的初始值 每次qwbt优化更新后 xff0c 都要重新进行积
  • VINS-Mono 理论详细解读——紧耦合后端非线性优化 IMU+视觉的残差residual、Jacobian、协方差、基于舒尔补的边缘化

    本讲是VINS最核心部分了 xff0c 前面经历了 1 xff09 视觉跟踪feature tracker IMU预积分integrationBase类 xff1b 2 xff09 初始化中SFM纯视觉估计滑动窗中所有帧的位姿和3D路标点深
  • 多传感器融合定位1(激光雷达+毫米波雷达)

    前言 LZ最近在看Udacity的无人驾驶课程 xff0c 该课程主要分为三部分 xff0c 第一部分的课程主要使用Python实现的车道线识别 车牌识别等计算机视觉项目 由于我对定位 建图等方面有些知识储备 xff0c 所以先从第二部分课
  • CMakeList.txt在大型文件应用(以前端为例)

    基本的CMakeLists txt并不难 xff0c 主要有生成库 生成执行文件 链接二者以及找库find package 找头文件include directories 生成执行文件add executable 链接库和执行文件targe
  • opencv - viz 画出SLAM轨迹

    原文在这里 数据集格式为 xff1a 时间 43 平移 43 旋转矩阵四元数 include lt opencv2 opencv hpp gt include lt fstream gt include lt iostream gt inc