KITTI数据集的点云格式转PCD格式

article/2025/10/23 8:45:45

参考文章:https://blog.csdn.net/xinguihu/article/details/78922005

KITTI数据集应该不用多做介绍了,基本上做自动驾驶的都知道这个东西。最近本人用到这个数据集想看看里面的点云长什么模样,却发现有点别扭,没有直接可以看的工具。因此想着转成PCD文件,然后用PCLViewer来看。因为不想用PCL,总感觉这东西配起来好烦,因此就想写纯C++的代码来转。因此也比较悲剧的需要了解PCD的格式,还好比较简单,下面先看看一个PCD文件:

在红色方框里的是文件的格式声明,比较少,而方框下面就是点云的XYZ坐标了。因此需要搞明白的地方比较少,就只有方框里面的声明是什么。

VERSION ---指定PCD文件版本,这个东西不写也没关系,可以正常运行

FIELDS ---指定一个点可以有的每一个维度和字段的名字,比如:

FIELDS x y z #正常的XYZ数据

FIELDS x y z rgb #正常的XYZ数据+点的颜色数据

SIZE ---用字节数指定每一个维度的大小,比如unsigned char或者char 就用1个byte,而unsigned int或者int或者float有4个byte

TYPE ---用一个字符指定每一个维度的类型

I –表示有符号类型int8(char)、int16(short)和int32(int);

U – 表示无符号类型uint8(unsigned char)、uint16(unsigned short)和uint32(unsigned int);

F –表示浮点类型。

COUNT ---指定每一个维度包含的元素数目。默认情况下,如果没有COUNT,所有维度的数目被设置成1。

WIDTH ---用点的数量表示点云数据集的宽度。根据是有序点云还是无序点云,WIDTH有两层解释:

1)它能确定无序数据集的点云中点的个数(和下面的POINTS一样);

2)它能确定有序点云数据集的宽度(一行中点的数目)。

注意:有序点云数据集,意味着点云是类似于图像(或者矩阵)的结构,数据分为行和列。这种点云的实例包括立体摄像机和时间飞行摄像机生成的数据。有序数据集的优势在于,预先了解相邻点(和像素点类似)的关系,邻域操作更加高效,这样就加速了计算并降低了PCL中某些算法的成本。

HEIGHT ---用点的数目表示点云数据集的高度。类似于WIDTH ,HEIGHT也有两层解释:

1)它表示有序点云数据集的高度(行的总数);

2)对于无序数据集它被设置成1(被用来检查一个数据集是有序还是无序)。

VIEWPOINT ---指定数据集中点云的获取视点。

VIEWPOINT有可能在不同坐标系之间转换的时候应用,在辅助获取其他特征时也比较有用,例如曲面法线,在判断方向一致性时,需要知道视点的方位,视点信息被指定为平移(txtytz)+四元数(qwqxqyqz)。

默认值是:VIEWPOINT 0 0 0 1 0 0 0

POINTS ---指定点云中点的总数。从0.7版本开始,该字段就有点多余了,因此有可能在将来的版本中将它移除。

OK,字段的释义就到这里,知道了这些我们可以将其中默认的字段删掉,也就是把上面截图中的数据格式改的更加简单一点,如下:

下面我们就只需要照着格式编写就可以了,KITTI的点云bin文件的解析因为相当简单请参考官方说明,下面放出读取bin文件并转为PCD的代码:

#include <iostream>void main()
{int32_t num = 1000000;float *data = (float*)malloc(num * sizeof(float));// 点float *px = data + 0;float *py = data + 1;float *pz = data + 2;float *pr = data + 3;//反射强度// 读取点云数据FILE *stream;fopen_s(&stream, "um_000000.bin", "rb");num = fread(data, sizeof(float), num, stream) / 4;//读入点云数据,大概10万+个点fclose(stream);/**转换成PCD**///写文件声明FILE *writePCDStream;fopen_s(&writePCDStream, "um_000000.pcd", "wb");fprintf(writePCDStream, "VERSION 0.7\n");//版本说明fprintf(writePCDStream, "FIELDS x y z\n");//维度说明fprintf(writePCDStream, "SIZE 4 4 4\n");//占用字节说明fprintf(writePCDStream, "TYPE F F F\n");//具体数据类型定义fprintf(writePCDStream, "WIDTH %d\n", num);//点数量fprintf(writePCDStream, "HEIGHT 1\n");//无序点云默认为1fprintf(writePCDStream, "POINTS %d\n", num);//点数量fprintf(writePCDStream, "DATA ascii\n");//文档使用字符类型shuom//写点云数据for (int32_t i = 0; i < num; i++){fprintf(writePCDStream, "%f %f %f\n",*px,*py,*pz);px += 4; py += 4; pz += 4; pr += 4;}fclose(writePCDStream);
}

转换出来的文件可以用PCLViewer打开,效果如下:

另外,如果需要PCLViewer,本人已经提取了最小的可运行包,可在这里下载:(比较贵哈哈,如果运行不了请自己安装VS2017运行库,再运行不了可以留言骂我哈哈哈)

如果要存成带颜色的点,则修改代码如下即可(颜色值设置过小会显示不出来,不知道为什么):

//将点云存成pcd文件
void saveaspcd(vector<pointcloud> &mPoint)
{FILE *writePCDStream;fopen_s(&writePCDStream, "save.pcd", "wb");fprintf(writePCDStream, "VERSION 0.7\n");//版本说明fprintf(writePCDStream, "FIELDS x y z rgb\n");//维度说明fprintf(writePCDStream, "SIZE 4 4 4 4\n");//占用字节说明fprintf(writePCDStream, "TYPE F F F F\n");//具体数据类型定义fprintf(writePCDStream, "WIDTH %d\n", mPoint.size());//点数量fprintf(writePCDStream, "HEIGHT 1\n");//无序点云默认为1fprintf(writePCDStream, "POINTS %d\n", mPoint.size());//点数量fprintf(writePCDStream, "DATA ascii\n");//文档使用字符类型shuom//写点云数据for (int i = 0; i < mPoint.size(); i++){int r = 10, g = 255, b = 0;//这里红色取太小就不能正确显示出颜色,原因不明。有需要再来研究下为什么。int rgb = (r << 16 | g << 8 | b);float frgb = (float)rgb;fprintf(writePCDStream, "%10.6f %10.6f %10.6f %+e\n", mPoint[i].x, mPoint[i].y, mPoint[i].z, frgb);}fclose(writePCDStream);
}

 

 

 

 

 


http://chatgpt.dhexx.cn/article/oBUVVqCE.shtml

相关文章

使用kitti数据集实现自动驾驶——发布照片、点云、IMU、GPS、显示2D和3D侦测框

本次内容主要是使用kitti数据集来可视化kitti车上一些传感器&#xff08;相机、激光雷达、IMU&#xff09;采集的资料以及对行人和车辆进行检测并在图像中画出行人和车辆的2D框、在点云中画出行人和车辆的3D框。 首先先看看最终实现的效果&#xff1a; 自动驾驶视频 看了上面的…

KITTI数据集-label解析笔记

笔记摘自&#xff1a;KITTI数据集--label解析与传感器间坐标转换参数解析_苏源流的博客-CSDN博客 KITTI数据集是自动驾驶领域最知名的数据集之一。 一、kitti数据集&#xff0c;label解析 16个数代表的含义&#xff1a; 第1个字符串&#xff1a;代表目标的类别 Car, Van, Tru…

16个车辆信息检测数据集收集汇总(简介及链接)

16个车辆信息检测数据集收集汇总&#xff08;简介及链接) 转载自&#xff1a;https://blog.csdn.net/u014546828/article/details/109089621?utm_mediumdistribute.pc_relevant.none-task-blog-baidujs_baidulandingword-1&spm1001.2101.3001.4242 目录 1. UA-DETRAC …

双目网络公开数据集的特性

文章目录 概述SceneFlowKITTI 2012 & 2015ETH3D 2017Middlebury 2014 概述 参考文章&#xff1a;Rethinking Training Strategy in Stereo Matching 主流双目公开数据集有&#xff1a;SceneFlow、KITTI、ETH3D、MB。 各个双目网络主流训练数据视差分布的直方图&#xff1a;…

KITTI数据集下载及介绍

KITTI数据集下载及介绍 KITTI数据集由德国卡尔斯鲁厄理工学院和丰田美国技术研究院联合创办&#xff0c;是目前国际上最大的自动驾驶场景下的计算机视觉算法评测数据集。该数据集用于评测立体图像(stereo)&#xff0c;光流(optical flow)&#xff0c;视觉测距(visual odometry…

KITTI 数据集--下载链接

Visual Odometry / SLAM Evaluation 2012 数据集主页&#xff1a;The KITTI Vision Benchmark Suite (cvlibs.net) 里程计基准由22个立体序列组成&#xff0c;以无损失png格式保存。 11个具有真实轨迹的序列&#xff08;00-10&#xff09;用于训练&#xff0c;11个没有真实…

KITTI数据集下载及解析

KITTI数据集下载及解析 W.P. Xiao, Vision group&#xff0c;SHUSV 版本更新时间更新内容作者1V 1.02020.01.09完成主体内容W.P. Xiao2 文章目录 KITTI Dataset1 简介1.1 数据采集平台1.2 坐标系 2 数据解析2.1 image文件2.2 velodyne文件2.3 calib文件2.4 label文件 3 KITTI可…

无人驾驶之KITTI数据集介绍与应用(一)——数据组织方式介绍

本系列博客旨在介绍无人驾驶领域中颇负盛名的KITTI公开数据集&#xff0c;首先整体介绍该数据集的由来、数据组织方式、官方开发工具的使用&#xff0c;重点详细介绍其中对于Object、Tracking和raw data的数据使用&#xff0c;主要分享了我在使用这些数据集时开发的一些工具&am…

waymo数据集总结

参考资料 官网&#xff1a; https://waymo.com/open/data/perception/#lidar-data 文章&#xff1a; https://arxiv.org/pdf/1912.04838.pdf github&#xff1a; https://github.com/waymo-research/waymo-open-dataset colab教程&#xff1a; https://colab.research.google.…

KITTI数据集介绍

目录 1、KITTI数据集概述2、kitti数据采集平台3、Kitti数据集标注格式参考文献&#xff1a; 1、KITTI数据集概述 KITTI数据集由德国卡尔斯鲁厄理工学院和丰田美国技术研究院联合创办&#xff0c;是目前国际上最大的自动驾驶场景下的算法评测数据集。该数据集用于评测立体图像(…

KITTI 数据集简介

数据集简介 KITTI数据集由德国卡尔斯鲁厄理工学院和丰田美国技术研究院联合创办&#xff0c;是目前国际上自动驾驶场景下常用的数据集之一。KITTI数据集的数据采集平台装配有2个灰度摄像机&#xff0c;2个彩色摄像机&#xff0c;一个Velodyne 64线3D激光雷达&#xff0c;4个光…

KITTI数据集简析

文章目录 KITTI数据集数据集结构数据集内容data_object_calib 样本标定数据data_object_label_2 3D点云标注文件 KITTI数据集 数据集结构 KITTI数据集网盘 提取码&#xff1a;0bjl KITTI ├── devkit_object | ├── cpp | ├── mapping | ├── matlab | └─…

KITTI数据集(概念版)

一、参考资料 KITTI 官网 kitti数据集各个榜单介绍 自动驾驶KITTI数据集详解 KITTI数据集简介与使用 kitti数据集各个榜单介绍 KITTI数据集介绍 KITTI数据集简介&#xff08;一&#xff09; — 激光雷达数据 【KITTI】KITTI数据集简介&#xff08;二&#xff09; — 标注数据l…

KITTI数据集

KITTI数据集分为2012和2015 KITTI数据集由德国卡尔斯鲁厄理工学院和丰田美国技术研究院联合创办&#xff0c;是目前国际上最大的自动驾驶场景下的计算机视觉算法评测数据集。KITTI包含市区、乡村和高速公路等场景采集的真实图像数据&#xff0c;每张图像中最多达15辆车和30个行…

Vins-fusion gps融合 KITTY数据集测试

下载kitti数据集 下载kitti数据集和真值poses的00.txt以及sequences文件00序列的times.txt&#xff0c;&#xff08;全网找了好久&#xff0c;最后不得已翻墙从官网down下来的&#xff09; 代码修改&#xff0c;保存输出数据 先指定输出路径:打开vins-fusion/config/kitti_r…

详解KITTI数据集

详解KITTI数据集 一、KITTI数据集发布方 2011年&#xff0c;Andreas Geiger&#xff08;KIT&#xff09;、Philip Lenz&#xff08;KIT&#xff09;、Raquel Urtasun&#xff08;TTIC&#xff09;三位年轻人发现&#xff0c;阻碍视觉感知系统在自动驾驶领域应用的主要原因之一…

KITTI数据集简介与使用

1.KITTI数据集概述 KITTI数据集由德国卡尔斯鲁厄理工学院和丰田美国技术研究院联合创办&#xff0c;是目前国际上最大的自动驾驶场景下的计算机视觉算法评测数据集。该数据集用于评测立体图像(stereo)&#xff0c;光流(optical flow)&#xff0c;视觉测距(visual odometry)&…

计算机视觉数据集介绍:KITTI数据集

KITTI数据集简介 KITTI数据集是由德国卡尔斯鲁厄理工学院和丰田美国技术研究院联合创办&#xff0c;利用组装的设备齐全的采集车辆对实际交通场景进行数据采集获得的公开数据集。该数据集包含丰富多样的传感器数据&#xff08;有双目相机、64线激光雷达、GPS/IMU组合导航定位系…

盘阿里云ECS内挖矿程序

1.二话不说先上图&#xff0c;cpu一路飙升在100% 2.进入服务器top命令查看占用cpu的异常进程 3.找到目标PID kill -9 10478 干掉这个进程&#xff0c;没几秒这个Macron的进程又死灰复燃 4.定位Macron目录 ls -l /proc/$PID/exe 定位到发现目标文件为/tmp/Macron&#xff0c;…

记录_第一次解决挖矿程序入侵问题

记录第一次处理&#xff0c;服务器也被挖矿程序入侵&#xff0c;原本是不想处理的&#xff0c;但是阿里云一直给我警告&#xff0c;然后再不处理服务器给我停了&#xff0c;这导致我立马打开电脑进行处理&#xff0c;怎么处理的我也不会啊&#xff0c;就一直百度&#xff0c;还…