【点云可视化】自制ply文件并使用open3d可视化点云

2023-05-16

使用open3d可视化点云,需要将点云制作为ply文件传入函数中。

安装open3d

直接使用pip安装

pip install open3d

ply文件

ply文件的结构为:文件头+数据内容,文件头从 ply 一行开始,到 end_header 为止,里面定义了此 ply文件中数据的组织形式,包括数据类型和个数。后面是点云的坐标信息及每个点的颜色属性的,参考自

如下为具有5个点的点云,end_header后每一行表示一个点的x,y,z,R,G,B信息

ply
format ascii 1.0
comment PCL generated
element vertex 5
property float x
property float y
property float z
property uchar red
property uchar green
property uchar blue
end_header
-0.25412 -0.11759 0.01171 255 0 255
0.18866 0.0793 0.00609 255 0 255
0.03777 0.06232 -0.00753 255 0 255
-0.25185 -0.08387 -0.01735 255 0 255
-0.35174 -0.16687 -0.00875 0 255 0

假设该文件为test.ply文件,则pyhon中使用open3d进行可视化命令为

import open3d as o3d
# visualization of point clouds.
pcd = o3d.io.read_point_cloud('test.ply')
o3d.visualization.draw_geometries([pcd])

在这里插入图片描述

自制ply文件

将numpy格式的点云转换为ply文件进行可视化很简单,根据上面的格式来写文件即可,下面给出一个参考

import open3d as o3d
import numpy as np

def makePlyFile(xyzs, labels, fileName='makeply.ply'):
    '''Make a ply file for open3d.visualization.draw_geometries
    :param xyzs:    numpy array of point clouds 3D coordinate, shape (numpoints, 3).
    :param labels:  numpy array of point label, shape (numpoints, ).
    '''
    RGBS = [
        (0, 255, 255),
        (255, 0, 0),
        (0, 255, 0),
        (0, 0, 255),
        (0, 0, 0),
        (255, 0, 255)
    ]

    with open(fileName, 'w') as f:
        f.write('ply\n')
        f.write('format ascii 1.0\n')
        f.write('comment PCL generated\n')
        f.write('element vertex {}\n'.format(len(xyzs)))
        f.write('property float x\n')
        f.write('property float y\n')
        f.write('property float z\n')
        f.write('property uchar red\n')
        f.write('property uchar green\n')
        f.write('property uchar blue\n')
        f.write('end_header\n')
        for i in range(len(xyzs)):
            r, g, b = RGBS[int(labels[i])-1]
            x, y, z = xyzs[i]
            f.write('{} {} {} {} {} {}\n'.format(x, y, z, r, g, b))

if __name__ == "__main__":
    numpoints = 2000  # 2000个点
    xyzs = np.random.rand(numpoints, 3)
    labels = np.random.randint(0, 4, numpoints)  # 4种label
    makePlyFile(xyzs, labels, 'demo.ply')
    pcd = o3d.io.read_point_cloud('demo.ply')
    o3d.visualization.draw_geometries([pcd])

在这里插入图片描述

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

【点云可视化】自制ply文件并使用open3d可视化点云 的相关文章

  • 树莓派无法安装pyqt5与pandas

    问题描述 使用pip3 install安装一些包 xff0c 例如pyqt5 pandas无法成功 sudo pip3 install pandas sudo pip3 install pyqt5 无法安装 解决方案 xff1a 安装pan
  • 【Java】二维数组初始化

    带值初始化 span class token keyword int span a span class token punctuation span span class token punctuation span span class
  • 【图】1162. 地图分析(多源BFS)

    题目 你现在手里有一份大小为 N x N 的 地图 xff08 网格 xff09 grid xff0c 上面的每个 区域 xff08 单元格 xff09 都用 0 和 1 标记好了 其中 0 代表海洋 xff0c 1 代表陆地 xff0c
  • 【tensorflow】数据增强

    使用tf image对图片进行数据增强 读入图片 span class token keyword from span PIL span class token keyword import span Image span class to
  • 【HashMap】使用自定义类作为key

    需要重写hashCode 和equals 方法才能实现自定义键在HashMap中的查找 span class token keyword class span span class token class name Pos span spa
  • 【图】1267. 统计参与通信的服务器

    题目 这里有一幅服务器分布图 xff0c 服务器的位置标识在 m n 的整数矩阵网格 grid 中 xff0c 1 表示单元格上有服务器 xff0c 0 表示没有 如果两台服务器位于同一行或者同一列 xff0c 我们就认为它们之间可以进行通
  • 【并查集】Java实现

    并查集理解 并查集的数据结构实现一般是数组 xff0c 通过数组来指示各个元素之间的父子关系 xff0c 通常初始化为 1 xff0c 若最终该位置的值大于0 xff0c 则表示该位置是一个孩子 xff0c 其父亲为节点的值 并查集的两个重
  • 【并查集】721. 账户合并

    题目 给定一个列表 accounts xff0c 每个元素 accounts i 是一个字符串列表 xff0c 其中第一个元素 accounts i 0 是 名称 name xff0c 其余元素是 emails 表示该帐户的邮箱地址 现在
  • 【并查集】面试题 17.07. 婴儿名字

    题目 每年 xff0c 政府都会公布一万个最常见的婴儿名字和它们出现的频率 xff0c 也就是同名婴儿的数量 有些名字有多种拼法 xff0c 例如 xff0c John 和 Jon 本质上是相同的名字 xff0c 但被当成了两个名字公布出来
  • 【Java】字符串比较compareTo

    根据字典序比较两个字符串的大小 xff0c 使用compareTo方法 xff0c 如下 xff0c 如果字符串str1和str2相等则res 61 0 xff0c 若str1字典序小于str2则res lt 0 xff0c 否则res g
  • 【Java】String indexOf substring截取字符串

    使用indexOf char c 方法获取字符串中第一次出现字符c的下标 xff0c 例如 span class token keyword public span span class token keyword class span s
  • 树莓派3B+环境搭建

    转载 xff1a https blog csdn net zhangjun62 article details 80517176 我的树莓派3b 43 没有买HDMI 屏 xff0c 利用网线与电脑主机相连操纵树莓派 如果买回来接上电 xf
  • 【Scala】创建整型数组

    var res span class token operator 61 span new ArrayBuffer span class token punctuation span Int span class token punctua
  • 【RDD编程】map和mapPartitions

    map和mapPartitions map针对RDD中的每一个元素调用一次函数 xff0c 而mapPartitions针对RDD中每个Partition调用一次函数 xff0c 假设RDD有N个元素 xff0c 有M个分区 xff0c 那
  • 【Spark入门项目】词频统计

    项目要求 要求统计txt英文文件中每个单词出现的次数 txt文件内随机拷贝英文内容 xff0c 如下 The scientists re analysed a sample collected by NASA astronauts duri
  • 【jieba】中文分词

    span class token keyword import span jieba words span class token operator 61 span jieba span class token punctuation sp
  • 【Python】读取中文

    fn span class token operator 61 span span class token builtin open span span class token punctuation span path span clas
  • 【WordCloud】生成词云

    generate from frequencies xff1a 从频率字典中生成词云 该方法传入统计好的词频字典 xff0c 例如 39 Python 39 5 39 Hadoop 39 10 39 Spark 39 20 39 大数据 3
  • 【Spark入门项目】统计男女生身高的平均值、最大、最小值

    项目要求 分别统计男女生身高的平均值 最大 最小值 xff0c 数据格式为 xff08 ID xff0c sex xff0c height xff09 xff0c 如下 xff1a 1 M 174 2 F 165 3 M 180 4 M 1
  • 【Spark入门项目】关键词统计

    项目描述 统计txt文件中出现频率前10的关键词 xff0c 内如如下 实现流程 初始化spark配置通过textFile方法读取txt文件通过flatMap将RDD中的每一个元素调用split方法分词 xff0c split中使用jieb

随机推荐

  • 【二叉搜索树】面试题 17.12. BiNode

    题目 二叉树数据结构TreeNode可用来表示单向链表 xff08 其中left置空 xff0c right为下一个链表节点 xff09 实现一个方法 xff0c 把二叉搜索树转换为单向链表 xff0c 要求依然符合二叉搜索树的性质 xff
  • 【二叉搜索树】1305. 两棵二叉搜索树中的所有元素(非递归中序遍历)

    题目 给你 root1 和 root2 这两棵二叉搜索树 请你返回一个列表 xff0c 其中包含 两棵树 中的所有整数并按 升序 排序 示例 1 xff1a 输入 xff1a root1 span class token operator
  • 51单片机的RFID门禁系统

    一 硬件方案 本RFID系统设计可分为硬件部分和软件部分 硬件部分以MFRC522射频识别模块为核心 xff0c 结合主控模块STC89C52设计系统的外围硬件电路 xff0c 实现对射频卡的控制与MCU之间的互通 软件部分采用C语言进行系
  • 【win10 Kafka基本操作】启动、创建topic、发送信息

    1 启动Zookeeper Kafka依赖于zookeeper xff0c 因此需要先启动zookeeper xff0c 使用kafka内置的zookeeper xff0c cd到kafka的bin windows目录下 xff0c 运行如
  • java.lang.IllegalArgumentException: Unsupported class file major version 58

    使用scala编写代码 xff0c 程序报错 java lang IllegalArgumentException Unsupported class file major version 58 改错误为jdk版本和scala不兼容 xff
  • 【跳表】

    跳表原理 跳变是一种高效的搜索结构 xff0c 是对链表的一种优化 xff0c 如下图所示 xff0c 以下图片均摘自博客 xff0c 原始的链表结构如下图 xff0c 实现查找 删除和插入复杂度都为O n xff0c 因为需要遍历链表 而
  • 【Union联合】

    C 43 43 的联合是一个特殊的类 xff0c 联合中可以有多个数据成员 xff0c 但是在任意时刻只能有一个数据成员有值 xff0c 例如下列联合中有三个数据成员 xff0c 其中占位最大的是a xff0c 因此该联合的所占的大小为32
  • 【拼凑硬币】腾讯机试题

    拼凑硬币 时间限制 xff08 每个case xff09 2s 空间限制 xff1a 128MB 小Q十分富有 xff0c 拥有非常多的硬币 xff0c 小Q拥有的硬币是有规律的 xff0c 对于所有的非负整数K xff0c 小Q恰好各有两
  • 【python】glob标准库使用,提取满足条件的目录或文件

    glob 文件名模式匹配 xff0c 不用遍历整个目录判断每个文件是不是符合 例子 xff1a 文件结构如下 xff0c 使用glob读取files下vgg开头且后面为单个数字的文件 代码如下 xff0c 表示匹配单个字符 span cla
  • 【ERROR】Failed to get convolution algorithm. This is probably because cuDNN failed to initialize

    1 有可能是显存不足 xff0c 尝试减小batchsize 2 os environ 39 TF FORCE GPU ALLOW GROWTH 39 61 39 true 39 这个语句的意思是 xff0c TensorFlow 在分配显
  • 【tensorboard】可视化模型

    关键使用tf summary trace on graph 61 True profiler 61 True 跟踪张量的流动 xff0c tf summary trace export导出图的结构 span class token keyw
  • 【python】画三维散点图Axes3D

    span class token keyword import span numpy span class token keyword as span np span class token keyword import span matp
  • 【python】输出当前时间

    span class token keyword import span time span class token keyword print span span class token punctuation span time spa
  • K8S Flannel

    1 简介 flannel是CoreOS提供用于解决Dokcer集群跨主机通讯的覆盖网络工具 它的主要思路是 xff1a 预先留出一个网段 xff0c 每个主机使用其中一部分 xff0c 然后每个容器被分配不同的ip xff1b 让所有的容器
  • 【dlib库安装】

    直接pip安装dlib库会报错 xff0c 需要先安装cmake xff0c 再安装dlib conda下可以分别使用以下命令 xff08 一行一行来 xff09 conda span class token function instal
  • 【tensorflow】tf.slice()

    tf slice inputs begin size name 是tensorflow中对向量inputs的切片 xff0c begin表示每个维度要抽取的开始位置 xff0c size表示从开始位置往后要抽取的元素个数 xff0c 若某个
  • 【Anaconda配置tensorflow2.0GPU+CUDA+CUDNN】

    创建一个新环境conda create name tf gpu python 61 3 6 xff0c python版本为3 6 xff0c 然后分别执行以下语句 xff0c conda install cupy可以自动寻找符合版本的cud
  • 【python】不同目录下导入py文件

    https zhuanlan zhihu com p 64893308
  • 【python】使用cupy加速

    cupy和numpy使用类似 xff0c 不同的是cupy在计算数组和矩阵时直接调用GPU来加速 xff0c 而numpy是调用cpu计算 在使用cupy时需要注意 xff0c cupy适合高维大尺寸的向量计算 xff0c 因为初始化GPU
  • 【点云可视化】自制ply文件并使用open3d可视化点云

    使用open3d可视化点云 xff0c 需要将点云制作为ply文件传入函数中 安装open3d 直接使用pip安装 pip span class token function install span open3d ply文件 ply文件的