点云数据介绍

2024-08-29 08:36
文章标签 数据 介绍 点云

本文主要是介绍点云数据介绍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本篇内容

  • 通过PCD文件介绍点云数据
  • 如何通过PCL库读取和保存PCD点云数据文件

1 点云数据

最简单的点云数据就是一堆三维坐标点(x,y,z),除了坐标还可以记录每个点的颜色信息(r,g,b),或者强度信息(intensity)等

2 PCD文件详解

把一个pcd文件放入vscode中,如下图所示:
PS:要保证pcd文件是通过ascii类型,如果是二进制类型,通过vscode打开则是乱码
在这里插入图片描述

  1. VERSION
    指定pcd文件的版本
  2. FIELDS
    指定数据区每个数据所代表的意义,从上述示图中可以看到,数据区每行有4个float类型的数字,通过空格隔开,分别代表x坐标、y坐标、z坐标、强度值
  3. SIZE
    指定每个数据所占用的字节大小,float类型占用4个字节
  4. TYPE
    指定每个数据的类型,F代表float
  5. COUNT
    抱歉,不知道代表什么意义,但是平时也没用到
  6. WIDTH
    对于无序点云,WIDTH等于点云总数量;对于有序点云(通过深度相机采集),WIDTH等于图像宽度
  7. HEIGHT
    对于无序点云,HEIGHT等于1;对于有序点云,HEIGHT等于图像高度
  8. POINTS
    点云总数量
  9. VIEWPOINT
    指定观测视角,例如通过pcl_viewer打开pcd文件时,通过VIEWPOINT可以决定默认是从左边观测或是从其他方向观测。它本质上是一个位姿,由平移tx,ty,tz和四元数qw,qx,qy,qz组成
  10. DATA
    指定数据类型:ascii或binary

3 通过PCL读取点云文件

3.1 理解点云类型

大家对C++的vector很熟悉,声明一个vector变量方式如下:

std::vector<int> v;	//一个存储一堆int类型数据的vector

在PCL库中声明一个用于保存点云数据的变量方式如下:

pcl::PointCloud<pcl::PointXYZ> cloud;	//一个存储一堆pcl::PointXYZ类型数据的PointCloud

pcl::PointXYZ等价于int,用于描述每个点的类型,示例中就表示每个点只包含(x,y,z)坐标。Pcl库还提前定义了很多点云类型,这些点云类型对应了第2节中的FIELDS,FIELDS包含较多的信息,就可以更换对应的点云类型,通常至少会包含x,y,z,如下图所示:

在这里插入图片描述

3.2 读取点云文件流程

声明点云变量:

  • 由于点云文件通常占用内存较大,因此一般申请为指针
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);

读取点云文件:

pcl::io::loadPCDFile<pcl::PointXYZ>(pcd_file_path, *cloud);

保存点云文件:

pcl::io::savePCDFileASCII(pcd_save_path, *cloud);

调试过程:
通过cloudcompare软件打开需要读取的pcd文件,可以看到这份pcd文件包含了397个点
在这里插入图片描述
代码debug,成功读取:
在这里插入图片描述

4 完整代码

#include <string>
#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_cloud.h>
#include <pcl/point_types.h>int main(int argc, char **argv)
{if (argc < 3) {std::cout<<"Usage: ./read_pcd <pcd_file_path> <pcd_save_path>\n";return -1;}std::string pcd_file_path(argv[1]);std::string pcd_save_path(argv[2]);// 声明变量,用于保存点云数据pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);// 读取pcd点云文件if (pcl::io::loadPCDFile<pcl::PointXYZ>(pcd_file_path, *cloud) == -1) {std::cerr<<"check pcd path\n";return -1;}// 打印点云infostd::cout<<"pcd size:"<<cloud->size()<<"\n";std::cout<<"pcd width:"<<cloud->width<<"\n";std::cout<<"pcd height:"<<cloud->height<<"\n";// 保存点云数据pcl::io::savePCDFileASCII(pcd_save_path, *cloud);return 0;
}

这篇关于点云数据介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1117371

相关文章

Python MySQL如何通过Binlog获取变更记录恢复数据

《PythonMySQL如何通过Binlog获取变更记录恢复数据》本文介绍了如何使用Python和pymysqlreplication库通过MySQL的二进制日志(Binlog)获取数据库的变更记录... 目录python mysql通过Binlog获取变更记录恢复数据1.安装pymysqlreplicat

Linux使用dd命令来复制和转换数据的操作方法

《Linux使用dd命令来复制和转换数据的操作方法》Linux中的dd命令是一个功能强大的数据复制和转换实用程序,它以较低级别运行,通常用于创建可启动的USB驱动器、克隆磁盘和生成随机数据等任务,本文... 目录简介功能和能力语法常用选项示例用法基础用法创建可启动www.chinasem.cn的 USB 驱动

java脚本使用不同版本jdk的说明介绍

《java脚本使用不同版本jdk的说明介绍》本文介绍了在Java中执行JavaScript脚本的几种方式,包括使用ScriptEngine、Nashorn和GraalVM,ScriptEngine适用... 目录Java脚本使用不同版本jdk的说明1.使用ScriptEngine执行javascript2.

Oracle数据库使用 listagg去重删除重复数据的方法汇总

《Oracle数据库使用listagg去重删除重复数据的方法汇总》文章介绍了在Oracle数据库中使用LISTAGG和XMLAGG函数进行字符串聚合并去重的方法,包括去重聚合、使用XML解析和CLO... 目录案例表第一种:使用wm_concat() + distinct去重聚合第二种:使用listagg,

Python实现将实体类列表数据导出到Excel文件

《Python实现将实体类列表数据导出到Excel文件》在数据处理和报告生成中,将实体类的列表数据导出到Excel文件是一项常见任务,Python提供了多种库来实现这一目标,下面就来跟随小编一起学习一... 目录一、环境准备二、定义实体类三、创建实体类列表四、将实体类列表转换为DataFrame五、导出Da

Python实现数据清洗的18种方法

《Python实现数据清洗的18种方法》本文主要介绍了Python实现数据清洗的18种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录1. 去除字符串两边空格2. 转换数据类型3. 大小写转换4. 移除列表中的重复元素5. 快速统

Python数据处理之导入导出Excel数据方式

《Python数据处理之导入导出Excel数据方式》Python是Excel数据处理的绝佳工具,通过Pandas和Openpyxl等库可以实现数据的导入、导出和自动化处理,从基础的数据读取和清洗到复杂... 目录python导入导出Excel数据开启数据之旅:为什么Python是Excel数据处理的最佳拍档

Python实现NLP的完整流程介绍

《Python实现NLP的完整流程介绍》这篇文章主要为大家详细介绍了Python实现NLP的完整流程,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 编程安装和导入必要的库2. 文本数据准备3. 文本预处理3.1 小写化3.2 分词(Tokenizatio

在Pandas中进行数据重命名的方法示例

《在Pandas中进行数据重命名的方法示例》Pandas作为Python中最流行的数据处理库,提供了强大的数据操作功能,其中数据重命名是常见且基础的操作之一,本文将通过简洁明了的讲解和丰富的代码示例,... 目录一、引言二、Pandas rename方法简介三、列名重命名3.1 使用字典进行列名重命名3.编

Python使用Pandas库将Excel数据叠加生成新DataFrame的操作指南

《Python使用Pandas库将Excel数据叠加生成新DataFrame的操作指南》在日常数据处理工作中,我们经常需要将不同Excel文档中的数据整合到一个新的DataFrame中,以便进行进一步... 目录一、准备工作二、读取Excel文件三、数据叠加四、处理重复数据(可选)五、保存新DataFram