【Python】可视化KITTI激光雷达点云&绘制立体框

2023-05-16

更新2023-5-4不如open3d好用,依赖太多,已转用open3d库

前言

最近在复现PointRCNN论文过程中发现没有可视化代码,于是查找资料找到了:
pointRCNN 结果可视化——tiatiatiatia

按照参考链接下载代码【轮子库】并可视化成功了
在这里插入图片描述
在这里插入图片描述

mayavi库的学习

主要是利用了mlab模块:

Mayavi2 旨在提供一个简单、可交互的3D数据或3D绘图的可视化。其做法如下:
(可选)一个丰富的用户界面,可以和数据、对象进行交互。简洁清晰的Python接口,以及可以使用类似于matlab和matplotlib的3D可视化函数(参考:ref:mlab ),或者面向对象的交互界面。其底层封装VTK,但是学习它并不是必须的。此外,Mayavi2是一个可复用的工具箱,您可以用不同的方法整合到您的库或者应用中,结合Envisage应用程序框架组装成特定领域的工具。

import os
import numpy as np
import mayavi.mlab as mlab

rootpath = "/home/rock/PointRCNN/kitti_object_vis/"
datapath = os.path.join(rootpath, "data/object/training/velodyne/")
data = np.fromfile(datapath + "000000.bin", dtype=np.float32).reshape(-1, 4)
fig = mlab.figure(figure=None,
                  bgcolor=(0, 0, 0),
                  fgcolor=None,
                  engine=None,
                  size=(1600, 1000))
#mayavi显示data颜色按照高度改变
mlab.points3d(data[:, 0],
              data[:, 1],
              data[:, 2],
              data[:, 2],
              mode="point",
              colormap="gnuplot",
              scale_factor=1,
              figure=fig)
mlab.points3d(0, 0, 0, color=(1, 1, 1), mode="sphere", scale_factor=0.5)
axes = np.array(
    [[2.0, 0.0, 0.0, 0.0], [0.0, 2.0, 0.0, 0.0], [0.0, 0.0, 2.0, 0.0]],
    dtype=np.float64,
)
mlab.plot3d(
    [0, axes[0, 0]],
    [0, axes[0, 1]],
    [0, axes[0, 2]],
    color=(1, 0, 0),
    tube_radius=None,
    figure=fig,
)
mlab.plot3d(
    [0, axes[1, 0]],
    [0, axes[1, 1]],
    [0, axes[1, 2]],
    color=(0, 1, 0),
    tube_radius=None,
    figure=fig,
)
mlab.plot3d(
    [0, axes[2, 0]],
    [0, axes[2, 1]],
    [0, axes[2, 2]],
    color=(0, 0, 1),
    tube_radius=None,
    figure=fig,
)
fov = np.array(
    [[20.0, 20.0, 0.0, 0.0], [20.0, -20.0, 0.0, 0.0]],
    dtype=np.float64  # 45 degree
)

mlab.plot3d(
    [0, fov[0, 0]],
    [0, fov[0, 1]],
    [0, fov[0, 2]],
    color=(1, 1, 1),
    tube_radius=None,
    line_width=1,
    figure=fig,
)
mlab.plot3d(
    [0, fov[1, 0]],
    [0, fov[1, 1]],
    [0, fov[1, 2]],
    color=(1, 1, 1),
    tube_radius=None,
    line_width=1,
    figure=fig,
)

# draw square region
TOP_Y_MIN = -21
TOP_Y_MAX = 21
TOP_X_MIN = 0
TOP_X_MAX = 40


x1 = TOP_X_MIN
x2 = TOP_X_MAX
y1 = TOP_Y_MIN
y2 = TOP_Y_MAX
mlab.plot3d(
    [x1, x1],
    [y1, y2],
    [0, 0],
    color=(0.5, 0.5, 0.5),
    tube_radius=0.1,
    line_width=1,
    figure=fig,
)
mlab.plot3d(
    [x2, x2],
    [y1, y2],
    [0, 0],
    color=(0.5, 0.5, 0.5),
    tube_radius=0.1,
    line_width=1,
    figure=fig,
)
mlab.plot3d(
    [x1, x2],
    [y1, y1],
    [0, 0],
    color=(0.5, 0.5, 0.5),
    tube_radius=0.1,
    line_width=1,
    figure=fig,
)
mlab.plot3d(
    [x1, x2],
    [y2, y2],
    [0, 0],
    color=(0.5, 0.5, 0.5),
    tube_radius=0.1,
    line_width=1,
    figure=fig,
)
# mlab.orientation_axes()

#初始化正方体的8个点
p1 = np.array([2, 4, 2])
p2 = np.array([2, 0, 2])
p3 = np.array([0, 0, 2])
p4 = np.array([0, 4, 2])

p5 = np.array([2, 4, -1])
p6 = np.array([2, 0, -1])
p7 = np.array([0, 0, -1])
p8 = np.array([0, 4, -1])
b = np.array([p1, p2, p3, p4, p5, p6, p7, p8])
#平移正方体
b[:, 0] += 5
b[:, 1] += 1
for k in range(0, 4):
    # http://docs.enthought.com/mayavi/mayavi/auto/mlab_helper_functions.html
    i, j = k, (k + 1) % 4
    mlab.plot3d(
        [b[i, 0], b[j, 0]],
        [b[i, 1], b[j, 1]],
        [b[i, 2], b[j, 2]],
        color=(0, 1, 0),
        tube_radius=None,
        line_width=2,
        figure=fig,
    )

    i, j = k + 4, (k + 1) % 4 + 4
    mlab.plot3d(
        [b[i, 0], b[j, 0]],
        [b[i, 1], b[j, 1]],
        [b[i, 2], b[j, 2]],
        color=(0, 1, 0),
        tube_radius=None,
        line_width=2,
        figure=fig,
    )

    i, j = k, k + 4
    mlab.plot3d(
        [b[i, 0], b[j, 0]],
        [b[i, 1], b[j, 1]],
        [b[i, 2], b[j, 2]],
        color=(0, 1, 0),
        tube_radius=None,
        line_width=2,
        figure=fig,
    )
label = "car"
mlab.text3d(
    b[1, 0],
    b[1, 1],
    b[1, 2],
    label,
    scale=1,
    color=(1, 0, 0),
    figure=fig,
)
mlab.view(
    azimuth=180,
    elevation=50,
    focalpoint=[12.0909996, -1.04700089, -2.03249991],
    distance=62.0,
    figure=fig,
)
mlab.show()

在这里插入图片描述
tip:另外发现了VSCODE中代码缩进的技巧,非常好用,尤其是对于CV大法过来的代码。

pip install yapf

打开setting 搜索 python.formatting.provider

在这里插入图片描述
选中需要自动格式化缩进的代码点击右键 点击Format Selection就好了

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

【Python】可视化KITTI激光雷达点云&绘制立体框 的相关文章

  • 金融时间序列分析:6. AR模型实例(R语言)

    0 目录 金融时间序列分析 xff1a 9 ARMA自回归移动平均模型 金融时间序列分析 xff1a 8 MA模型实例 xff08 Python xff09 金融时间序列分析 xff1a 7 MA滑动平均模型 金融时间序列分析 xff1a
  • 比特率,帧率,分辨率对视频画质的影响

    0 前言 前几天和别人讨论视频编码参数对视频清晰度影响 xff0c 今日查查文献在此记录总结下 对最终用户而言 xff0c 其只关心视频的文件大小和画面质量 其中画面质量包括 xff1a 分辨率 xff0c 清晰度和流畅度 流畅度 xff1
  • 搭建Android Camera项目工程

    0 前言 这块内容非常简单 xff0c 需要注意的有两个 xff1a 需要申请相机权限需要一个Surface用来预览 1 申请相机权限 1 1 申请Camera权限 span class hljs tag lt span class hlj
  • 获取webshell权限的45种方法

    1 到GoogLe 搜索一些关键字 edit asp 韩国肉鸡为多 多数为MSSQL数据库 2 到Google site cq cn inurl asp 3 利用挖掘鸡和一个ASP木马 文件名是login asp 路径组是 manage 关
  • EGLContext: eglMakeCurrent详解

    1 前言 在完成EGL的初始化之后 xff0c 需要通过eglMakeCurrent 函数来将当前的上下文切换 xff0c 这样opengl的函数才能启动作用 boolean eglMakeCurrent EGLDisplay displa
  • UART串口通信 Verilog实现代码

    串行通信分为两种方式 xff1a 同步串行通信和异步串行通信 同步串行通信需要通信双方在同一时钟的控制下 xff0c 同步传输数据 xff1b 异步串行通信是指通信双方使用各自的时钟控制数据的发送和接收过程 UART 是一种采用异步串行通信
  • pytorch: 四种方法解决RuntimeError: CUDA out of memory. Tried to allocate ... MiB

    Bug xff1a RuntimeError CUDA out of memory Tried to allocate MiB 解决方法 xff1a 法一 xff1a 调小batch size xff0c 设到4基本上能解决问题 xff0c
  • Linux打开txt文件乱码的解决方法

    今天发现打开windows下的txt文本出现问题 xff0c 主要是编码问题 xff0c 所以这里我记录下这个问题的解决方法 Linux显示在 Windows 编辑过的中文就会显示乱码是由于两个操作系统使用的编码不同所致 Linux下使用的
  • ubuntu14.04安装cuda

    首先验证你是否有nvidia的显卡 xff08 http developer nvidia com cuda gpus这个网站查看你是否有支持gpu的显卡 xff09 xff1a lspci grep i nvidia 查看你的linux发
  • debian安装无线网卡驱动

    最近安装了debian8 xff0c 但是安装好了后发现不能连wifi 能连有线的 xff0c 笔记本不能连WIFI是个悲剧 xff0c 于是就度百度 xff0c 最后在一篇文章看到方法 xff0c 原文地址 xff1a https wik
  • 魔改Cmake系列:cmake中Boost找不到库的解决方法

    Begin finding boost libraries FindBoost cmake文件中 xff0c 在CMake share cmake 3 4 Modules 找到下面这几行代码 xff08 你可以搜索 xff09 messag
  • 关于softmax损失函数的推导

    关于softmax损失函数的推导 某人问我softamx损失函数的推导 索性就写一下 定义softmax损失函数的输入为 X N C 和 Y N C 其中N代表输入的数据的个数 C代表类别的个数 X指的是神经网络的输出 Y代表的是0 1矩阵
  • 手把手教你数据恢复编程(二)基础知识篇

    好了 接上一篇 xff0c 本篇 xff0c 我们将详细讲解NTFS文件系统的一些重要的数据结构 xff0c 闲话少叙 xff0c 咱们开讲 NTFS文件系统 一 NTFS简介 NTFS xff08 New Technology File
  • 数字图像基本处理算法

    数字图像基本处理算法 xizero00 常熟理工学院 xff08 CIT xff09 计算机科学与工程学院 下一代互联网实验室 NGIL Lab Email xizero00 64 163 com 由于SIFT算法需要用到很多算法 xff0
  • PyOpenPose编译与使用

    PyOpenPose编译 前言 PyOpenPose是一个OpenPose的python绑定 xff0c 你可以使用python来实现人体的姿态估计 用上python的openpose xff0c 想想就有点小激动呢 哈哈 PyOpenPo
  • torch系列:如何在torch内使用tensorboard

    torch也是可以使用tensorboard的 xff0c 通过安装crayon就可以 下面以ubuntu下的安装为例进行讲解 其实安装的过程还是会碰到不少曲折的过程的 主要为 安装crayon会提示找不到libssl so文件 xff0c
  • mask rcnn使用指南

    做姿态估计的小伙伴们肯定经常用检测器 xff0c 为了方便大家 xff0c 这里给出一个很方便的教程 让大家快速上手 xff0c 不用再纠结配置环境 xff01 欢迎加入我们的姿态估计群 xff1a 970029323 xff08 xff1
  • UML中的泛化、实现、依赖、关联、聚合、组合6种关系

    在UML中经常见到几种关系 xff1a 泛化 xff08 Generalization xff09 实现 xff08 Realization xff09 依赖 xff08 Dependency xff09 关联 xff08 Associat
  • RTOS系统与Linux系统的区别

    RTOS是实时操作系统 Linux是时分系统 xff0c 不过可以通过配置内核改成实时系统 实时操作系统 英文称Real Time Operating System xff0c 简称RTOS 1 实时操作系统定义 实时操作系统 xff08
  • 【Pytorch】学习笔记2023/2/28

    参考文献 Pytorch学习笔记 张贤同学 深度学习百科及面试资源 飞桨

随机推荐