点云的PCD和BIN格式及其转换与可视化
点云的PCD和BIN格式及其转换与可视化
- 点云PCD格式和BIN格式
- PCD 格式(Point Cloud Data)
- BIN 格式(Binary)
- PCD到BIN的格式转换
- 点云可视化
点云PCD格式和BIN格式
点云数据通常以不同的格式存储,其中PCD(Point Cloud Data)和BIN(Binary)是两种常见的格式,用于表示三维点云数据。下面是它们的具体介绍:
PCD 格式(Point Cloud Data)
PCD格式是一种常见的开放式点云数据存储格式,最初由ROS(Robot Operating System)中的PCL(Point Cloud Library)项目引入,现在广泛用于点云数据的存储和共享。
PCD文件通常是文本文件,以ASCII或二进制形式存储。ASCII格式易于阅读和编辑,但文件较大。二进制格式通常更紧凑,适用于大型点云数据。
PCD文件包含点云的几何信息和属性信息,如点的坐标、颜色、法线等。它还可以包含元数据,以描述点云的特性,如坐标系、点云类型等。
PCD格式具有广泛的支持,可以使用各种点云处理工具来读取和写入PCD文件。
BIN 格式(Binary)
BIN格式是一种更底层的点云数据存储格式,通常以二进制形式存储,因此在文件中的数据较紧凑,适用于大型点云数据的存储。
BIN文件通常只包含点云的几何信息,如点的坐标,而不包含额外的属性信息。这使得它适用于在存储和传输时保持数据的紧凑性。
与PCD不同,BIN格式通常不包含元数据,因此在读取时需要额外的信息来解释数据,如点的数量和坐标表示。
PCD到BIN的格式转换
在Kitti数据集中,点云以BIN的格式存储,在项目的实操中经常需要将采集得到的PCD格式点云转换成BIN格式,以方便后续的模型训练或测试。以下代码使用python语言实现了点云从PCD到BIN的格式转换:
默认情况下,PCD格式的点云保存在./pcd文件夹下,生成的BIN格式点云保存在./bin文件夹下。
import numpy as np
import os
import argparse
import pypcd
from tqdm import tqdmdef main():## Add parserparser = argparse.ArgumentParser(description="Convert .pcd to .bin")parser.add_argument("--pcd_path",help=".pcd file path.",type=str,default="./pcd")parser.add_argument("--bin_path",help=".bin file path.",type=str,default="./bin")args = parser.parse_args()## Find all pcd filespcd_files = []for (path, dir, files) in os.walk(args.pcd_path):for filename in files:# print(filename)ext = os.path.splitext(filename)[-1]if ext == '.pcd':pcd_files.append(path + "/" + filename)## Sort pcd files by file namepcd_files.sort() print("Finish to load point clouds!")## Make bin_path directorytry:if not (os.path.isdir(args.bin_path)):os.makedirs(os.path.join(args.bin_path))except OSError as e:if e.errno != errno.EEXIST:print ("Failed to create directory!!!!!")raise## Converting Processprint("Converting Start!")for pcd_file in tqdm(pcd_files):## Get pcd filepc = pypcd.PointCloud.from_path(pcd_file)## Generate bin file name## bin_file_name = "{}_{:05d}.bin".format(args.file_name, seq)pcd_name = pcd_file.split('/')[2]bin_file_name = pcd_name.split('.')[0]+'.'+pcd_name.split('.')[1]+'.bin'## print bin_file_name bin_file_path = os.path.join(args.bin_path, bin_file_name)## Get data from pcd (x, y, z, intensity, ring, time)np_x = (np.array(pc.pc_data['x'], dtype=np.float32)).astype(np.float32)np_y = (np.array(pc.pc_data['y'], dtype=np.float32)).astype(np.float32)np_z = (np.array(pc.pc_data['z'], dtype=np.float32)).astype(np.float32)np_i = (np.array(pc.pc_data['intensity'], dtype=np.float32)).astype(np.float32)/256# np_r = (np.array(pc.pc_data['ring'], dtype=np.float32)).astype(np.float32)# np_t = (np.array(pc.pc_data['time'], dtype=np.float32)).astype(np.float32)## Stack all data points_32 = np.transpose(np.vstack((np_x, np_y, np_z, np_i)))## Save bin file points_32.tofile(bin_file_path)if __name__ == "__main__":main()
拷贝代码写入到pcd2bin.py文件中,通过以下命令运行代码:
# []表示可省略
python pcd2bin.py [--pcd_path=./pcd] [--bin_path=./bin]
点云可视化
可视化的目的是验证格式转换前后,点云是否一样。
PCD格式的点云可以使用诸多软件进行可视化,例如MeshLab等,也可以使用如下的代码对PCD格式的点云进行可视化:
import numpy as np
import open3d as o3d
from open3d import geometrydef main():#创建窗口对象vis = o3d.visualization.Visualizer()#设置窗口标题vis.create_window(window_name="kitti")#设置点云大小vis.get_render_option().point_size = 1#设置颜色背景为黑色opt = vis.get_render_option()opt.background_color = np.asarray([0, 0, 0])##################################################################################################读取点云文件,创建点云对象pcd = o3d.io.read_point_cloud("./test.pcd")#设置点的颜色为白色pcd.paint_uniform_color([1,1,1])#将点云加入到窗口中vis.add_geometry(pcd)vis.run()vis.destroy_window()if __name__=="__main__":main()
使用如下代码对生成的BIN格式点云进行可视化:
import numpy as np
import mayavi.mlab# lidar_path换成自己的.bin文件路径
pointcloud = np.fromfile(str("./test.bin"), dtype=np.float32, count=-1).reshape([-1, 4])x = pointcloud[:, 0] # x position of point
y = pointcloud[:, 1] # y position of point
z = pointcloud[:, 2] # z position of pointr = pointcloud[:, 3] # reflectance value of point
d = np.sqrt(x ** 2 + y ** 2) # Map Distance from sensordegr = np.degrees(np.arctan(z / d))vals = 'height'
if vals == "height":col = z
else:col = dfig = mayavi.mlab.figure(bgcolor=(0, 0, 0), size=(640, 500))
mayavi.mlab.points3d(x, y, z,col, # Values used for Colormode="point",colormap='spectral', # 'bone', 'copper', 'gnuplot'# color=(0, 1, 0), # Used a fixed (r,g,b) insteadfigure=fig,)mayavi.mlab.show()**加粗样式**
点云的PCD和BIN格式及其转换与可视化相关推荐
- 利用 labelCloud 开源工具标注自己的点云数据集为KITTI标注格式教程(支持pcd、bin格式点云)
先贴地址 github 地址:https://github.com/ch-sa/labelcloud 标注为KITTI格式的复现步骤与操作流程 首先吧pcd格式点云转乘bin格式 克隆代码 git c ...
- 第二章 python-pcl、open3d读取、显示pcd、bin等格式点云数据
第二章 python-pcl.open3d读取.显示pcd.bin格式点云数据 文章目录 第二章 python-pcl.open3d读取.显示pcd.bin格式点云数据 前言 环境 一.点云数据类型 ...
- 点云bin格式和pcd格式相互转化
使用python-pcl, 也就是python版本的pcl库将bin格式转化为pcd格式,然后将点云进行显示 (C++版本的这里暂时不做说明) 参考python-pcl文件中的cluster_extr ...
- 关于asc、txt格式到pcd、ply格式数据转换
1 asc数据说明 许多点云数据是asc或txt数据格式,asc(ascii)即文本文件,数据已可视化的文本存储.在点云数据处理时,常面临数据格式转换问题,比如说需要转换成pcd或ply数据格式. 2 ...
- 点云数据pcd文件简介
SLAM学习交流可加群:248085206 三维点云数据简介 1 什么是点云数据 点云数据是指在一个三维坐标系中的一组向量的集合.这些向量通常以X,Y,Z三维坐标的形式表示,一般主要代表一个物体的外表 ...
- keil MDK中如何生成*.bin格式的文件
在Realview MDK的集成开发环境中,默认情况下可以生成*.axf格式的调试文件和*.hex格式的可执行文件.虽然这两个格式的文件非常有利于ULINK2仿真器的下载和调试,但是ADS的用户更习惯 ...
- KITTI车辆检测数据集转VOC格式(亲测成功,附KITTI云盘连接以及完整格式转换代码)- KITTI车辆检测数据集看着一篇就够了!
KIITI数据集转VOC格式 软件环境 一.准备数据集 1.1下载链接 1.2数据集使用方法 二.txt标注文件准换为VOC格式 2.1目前准换代码存在的问题 2.2博主提供的方法 2.3转换代码 2 ...
- 如何将字库生成工具生成的 .DZK/ . bin格式的文件转成.c格式文件
如何将字库生成工具生成的 .DZK/ . bin格式的文件转成.c格式文件 在我们项目开发的过程中,特别是做界面显示的时候,经常会遇到如 :多国文字点阵字库生成器TS3等软件其生成的.DZK格式文件, ...
- 深蓝词库转换2.4版发布,支持最新的搜狗用户词库备份bin格式
很高兴的告诉大家,感谢GitHub上的h4x3rotab提供python版的搜狗用户词库备份bin格式的解析算法,感谢tmxkn1提供了C#版的实现,深蓝词库转换终于迎来了一个重大更新,能够支持搜狗用 ...
- 深蓝词库转换1.9发布mdash;mdash;支持英库拼音、搜狗bin格式、FIT、中州韵等
经过了3个多月的沉寂,今天深蓝词库转换终于迎来了1.9版.这次版本升级主要包含了以下新特性: 一.支持微软英库Engkoo拼音输入法. 微软英库(Engkoo)拼音输入法是微软新推出适用于Win8的输 ...
最新文章
- NCEPU:线下组队学习周报(007)
- matlab 2012 vs2010混合编程
- Autofac 一个使用Demo
- 没登录网页也能个性化推荐?一文详解浏览器指纹
- 机器学习 | 决策树的理论与实践
- 拼接字符串时的引号嵌套
- 力扣题目——25. K 个一组翻转链表
- SpringMVC 参数传递
- CI框架全局登录控制
- 微信防撤回是怎么实现的?
- BIGEMAP GIS Office
- 摄像头各参数的意义_详解:摄像头参数介绍说明
- 《2013小企业会计准则》的适用范围
- 网页中使用iconfont图标
- Delphi下实现全屏快速找图找色 四、BitmapData.pas的使用
- 【SASS】 一个Opacity混合器(外加如何让背景透明 文字不透明)
- PHP 导出 Excel 换行不显示
- 解决Microsoft.NET Framework 3.5Service Pack1失败问题
- 64位 Fedora 11 硬盘安装 配置全解
- 使用draw.io桌面版代替visio制作流程图
热门文章
- IWBI针对组合式资产总盘WELL认证业务(WELL Portfolio)成立全球顾问网络
- 解决jupyter : The term ‘jupyter‘ is not recognized as the name of a cmdlet, function, script file
- 小型制氧机解决方案PCBA电路板开发
- Jquery Mobile中的UI核心要素【转】
- 移植三星的uboot(二)
- 杭州科技大学计算机学院几本,杭州电子科技大学是几本
- springBoot中实现异步线程池
- Open Mining:使用 Python 挖掘商业情报(Pandas Web 接口)
- CSS相关知识(一)
- 【逻辑思考】真正改变命运的其实并不是知识,而是这些知识带给你的能力的提高。也就是说,转化为能力的知识,才能够改变你的命运。