点云的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格式及其转换与可视化相关推荐

  1. 利用 labelCloud 开源工具标注自己的点云数据集为KITTI标注格式教程(支持pcd、bin格式点云)

    先贴地址 github 地址:https://github.com/ch-sa/labelcloud 标注为KITTI格式的复现步骤与操作流程 首先吧pcd格式点云转乘bin格式 克隆代码 git c ...

  2. 第二章 python-pcl、open3d读取、显示pcd、bin等格式点云数据

    第二章 python-pcl.open3d读取.显示pcd.bin格式点云数据 文章目录 第二章 python-pcl.open3d读取.显示pcd.bin格式点云数据 前言 环境 一.点云数据类型 ...

  3. 点云bin格式和pcd格式相互转化

    使用python-pcl, 也就是python版本的pcl库将bin格式转化为pcd格式,然后将点云进行显示 (C++版本的这里暂时不做说明) 参考python-pcl文件中的cluster_extr ...

  4. 关于asc、txt格式到pcd、ply格式数据转换

    1 asc数据说明 许多点云数据是asc或txt数据格式,asc(ascii)即文本文件,数据已可视化的文本存储.在点云数据处理时,常面临数据格式转换问题,比如说需要转换成pcd或ply数据格式. 2 ...

  5. 点云数据pcd文件简介

    SLAM学习交流可加群:248085206 三维点云数据简介 1 什么是点云数据 点云数据是指在一个三维坐标系中的一组向量的集合.这些向量通常以X,Y,Z三维坐标的形式表示,一般主要代表一个物体的外表 ...

  6. keil MDK中如何生成*.bin格式的文件

    在Realview MDK的集成开发环境中,默认情况下可以生成*.axf格式的调试文件和*.hex格式的可执行文件.虽然这两个格式的文件非常有利于ULINK2仿真器的下载和调试,但是ADS的用户更习惯 ...

  7. KITTI车辆检测数据集转VOC格式(亲测成功,附KITTI云盘连接以及完整格式转换代码)- KITTI车辆检测数据集看着一篇就够了!

    KIITI数据集转VOC格式 软件环境 一.准备数据集 1.1下载链接 1.2数据集使用方法 二.txt标注文件准换为VOC格式 2.1目前准换代码存在的问题 2.2博主提供的方法 2.3转换代码 2 ...

  8. 如何将字库生成工具生成的 .DZK/ . bin格式的文件转成.c格式文件

    如何将字库生成工具生成的 .DZK/ . bin格式的文件转成.c格式文件 在我们项目开发的过程中,特别是做界面显示的时候,经常会遇到如 :多国文字点阵字库生成器TS3等软件其生成的.DZK格式文件, ...

  9. 深蓝词库转换2.4版发布,支持最新的搜狗用户词库备份bin格式

    很高兴的告诉大家,感谢GitHub上的h4x3rotab提供python版的搜狗用户词库备份bin格式的解析算法,感谢tmxkn1提供了C#版的实现,深蓝词库转换终于迎来了一个重大更新,能够支持搜狗用 ...

  10. 深蓝词库转换1.9发布mdash;mdash;支持英库拼音、搜狗bin格式、FIT、中州韵等

    经过了3个多月的沉寂,今天深蓝词库转换终于迎来了1.9版.这次版本升级主要包含了以下新特性: 一.支持微软英库Engkoo拼音输入法. 微软英库(Engkoo)拼音输入法是微软新推出适用于Win8的输 ...

最新文章

  1. NCEPU:线下组队学习周报(007)
  2. matlab 2012 vs2010混合编程
  3. Autofac 一个使用Demo
  4. 没登录网页也能个性化推荐?一文详解浏览器指纹
  5. 机器学习 | 决策树的理论与实践
  6. 拼接字符串时的引号嵌套
  7. 力扣题目——25. K 个一组翻转链表
  8. SpringMVC 参数传递
  9. CI框架全局登录控制
  10. 微信防撤回是怎么实现的?
  11. BIGEMAP GIS Office
  12. 摄像头各参数的意义_详解:摄像头参数介绍说明
  13. 《2013小企业会计准则》的适用范围
  14. 网页中使用iconfont图标
  15. Delphi下实现全屏快速找图找色 四、BitmapData.pas的使用
  16. 【SASS】 一个Opacity混合器(外加如何让背景透明 文字不透明)
  17. PHP 导出 Excel 换行不显示
  18. 解决Microsoft.NET Framework 3.5Service Pack1失败问题
  19. 64位 Fedora 11 硬盘安装 配置全解
  20. 使用draw.io桌面版代替visio制作流程图

热门文章

  1. IWBI针对组合式资产总盘WELL认证业务(WELL Portfolio)成立全球顾问网络
  2. 解决jupyter : The term ‘jupyter‘ is not recognized as the name of a cmdlet, function, script file
  3. 小型制氧机解决方案PCBA电路板开发
  4. Jquery Mobile中的UI核心要素【转】
  5. 移植三星的uboot(二)
  6. 杭州科技大学计算机学院几本,杭州电子科技大学是几本
  7. springBoot中实现异步线程池
  8. Open Mining:使用 Python 挖掘商业情报(Pandas Web 接口)
  9. CSS相关知识(一)
  10. 【逻辑思考】真正改变命运的其实并不是知识,而是这些知识带给你的能力的提高。也就是说,转化为能力的知识,才能够改变你的命运。