不同格式点云存储结构(txt、pcd、las、ply)整理以及基本的读写、可视化方法

您所在的位置:网站首页 pod格式怎么打开 不同格式点云存储结构(txt、pcd、las、ply)整理以及基本的读写、可视化方法

不同格式点云存储结构(txt、pcd、las、ply)整理以及基本的读写、可视化方法

2024-07-03 15:13| 来源: 网络整理| 查看: 265

不同格式点云存储结构整理以及基本的读写、可视化方法 一、文本(txt)1.1、存储结构1.2、读取 二、PCD格式1.1、存储结构1.2、读写1.2.1、open3d读写(python)1.2.2、PCL读写(C++) 三、LAS格式3.1、存储结构3.2、读写3.2.1、使用laspy 读写(Python)3.2.2、使用laslib读写(C++) 四、PLY格式4.1、存储结构文件头(header)数据区域 4.2、读写4.2.1、使用plyfile读写(Python)4.2.2、使用pcl读写(C++)

一、文本(txt) 1.1、存储结构

使用文本格式存储的点云数据文件结构比较简单,每个点是一行记录,点的信息存储格式为 x y z或者 x y z r g b。

1.2、读取

读取文本格式的点云数据时,可以按照一般的文本读取方法,这里记录一下如何使用open3d读取txt格式的点云数据

import open3d as o3d txt_file=r"D:\test_data\bildstein_station1_xyz_intensity_rgb.txt" pcd=o3d.io.read_point_cloud(txt_file,format='xyz') o3d.visualization.draw([pcd]) 二、PCD格式

一个PCD文件是文件头部分和数据部分组成

1.1、存储结构 字段名字段解释VERSION指定PCD文件版本FIELDS指定一个点可以有的每一个维度和字段的名字SIZE用字节数指定每一个维度的大小TYPE用一个字符指定每一个维度的类型COUNT指定每一个维度包含的元素数据WIDTH无序点的数量或者有序点一行中点的数目HEIGHT无序点云中设置为1,有序点云中表示行数POINTS点云中点的总数DATA数据类型,二进制或者ASCII 1.2、读写 1.2.1、open3d读写(python)

读取pcd点云文件

import open3d as o3d import numpy as np #读取pcd数据并可视化 pcd_file=r"" pcd=o3d.io.read_point_cloud(pcd_file,format='pcd') #将点云的坐标和颜色转换为numpy格式 points=np.array(pcd.points) colors=np.array(pcd.colors) #可视化 o3d.visualization.draw([pcd])

保存pcd点云文件

#写入pcd格式 save_file="test2.pcd" #手动定义点云 points=np.array([[8,5,3], [9,0,1], [2,5,3], [0,4,2], [7,2,9], [8,8,4], [9,5,8], [2,5,9], [0,7,5], [11,2,8], [10,9,0] ]) colors=np.array([[255,0,0], [255,0,0], [0,255,0], [0,255,0], [0,0,255], [0,0,255], [255,0,255], [255,0,255], [255,255,0], [255,255,0], [255,255,0] ]) colors=colors/255 pcd=o3d.geometry.PointCloud() pcd.points=o3d.utility.Vector3dVector(points) pcd.colors=o3d.utility.Vector3dVector(colors) #可视化 o3d.visualization.draw_geometries([pcd]) #使用draw方法可视化需要将颜色归一化到0-1之间 # o3d.visualization.draw([pcd]) #保存 #o3d.io.write_point_cloud(save_file,pcd,write_ascii=True) #以ascii格式存储点数据集部分 o3d.io.write_point_cloud(save_file,pcd)#以二进制格式存储点数据集部分 pcd点数据集部分保存为ASCII格式

pcd点数据集部分保存为二进制格式,其中rgb是用位存储的方式写入的。

1.2.2、PCL读写(C++)

我们用上面生成的pcd文件做测试

#include #include #include using namespace std; int main() { string pcd_file = "D:\\project\\Python\\PointCloud\\test2.pcd"; //pcl::PointCloud::Ptr cloud(new pcl::PointCloud); pcl::PointCloud::Ptr cloud(new pcl::PointCloud); if (pcl::io::loadPCDFile(pcd_file,*cloud)==-1) { PCL_ERROR("couldn't read file\n"); return(-1); } for (size_t i=0;ipoints.size();++i) { cout


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3