点云数据介绍

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

相关文章

Redis的数据过期策略和数据淘汰策略

《Redis的数据过期策略和数据淘汰策略》本文主要介绍了Redis的数据过期策略和数据淘汰策略,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录一、数据过期策略1、惰性删除2、定期删除二、数据淘汰策略1、数据淘汰策略概念2、8种数据淘汰策略

轻松上手MYSQL之JSON函数实现高效数据查询与操作

《轻松上手MYSQL之JSON函数实现高效数据查询与操作》:本文主要介绍轻松上手MYSQL之JSON函数实现高效数据查询与操作的相关资料,MySQL提供了多个JSON函数,用于处理和查询JSON数... 目录一、jsON_EXTRACT 提取指定数据二、JSON_UNQUOTE 取消双引号三、JSON_KE

Python给Excel写入数据的四种方法小结

《Python给Excel写入数据的四种方法小结》本文主要介绍了Python给Excel写入数据的四种方法小结,包含openpyxl库、xlsxwriter库、pandas库和win32com库,具有... 目录1. 使用 openpyxl 库2. 使用 xlsxwriter 库3. 使用 pandas 库

SpringBoot定制JSON响应数据的实现

《SpringBoot定制JSON响应数据的实现》本文主要介绍了SpringBoot定制JSON响应数据的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们... 目录前言一、如何使用@jsonView这个注解?二、应用场景三、实战案例注解方式编程方式总结 前言

使用Python在Excel中创建和取消数据分组

《使用Python在Excel中创建和取消数据分组》Excel中的分组是一种通过添加层级结构将相邻行或列组织在一起的功能,当分组完成后,用户可以通过折叠或展开数据组来简化数据视图,这篇博客将介绍如何使... 目录引言使用工具python在Excel中创建行和列分组Python在Excel中创建嵌套分组Pyt

在Rust中要用Struct和Enum组织数据的原因解析

《在Rust中要用Struct和Enum组织数据的原因解析》在Rust中,Struct和Enum是组织数据的核心工具,Struct用于将相关字段封装为单一实体,便于管理和扩展,Enum用于明确定义所有... 目录为什么在Rust中要用Struct和Enum组织数据?一、使用struct组织数据:将相关字段绑

在Mysql环境下对数据进行增删改查的操作方法

《在Mysql环境下对数据进行增删改查的操作方法》本文介绍了在MySQL环境下对数据进行增删改查的基本操作,包括插入数据、修改数据、删除数据、数据查询(基本查询、连接查询、聚合函数查询、子查询)等,并... 目录一、插入数据:二、修改数据:三、删除数据:1、delete from 表名;2、truncate

Java实现Elasticsearch查询当前索引全部数据的完整代码

《Java实现Elasticsearch查询当前索引全部数据的完整代码》:本文主要介绍如何在Java中实现查询Elasticsearch索引中指定条件下的全部数据,通过设置滚动查询参数(scrol... 目录需求背景通常情况Java 实现查询 Elasticsearch 全部数据写在最后需求背景通常情况下

Java中注解与元数据示例详解

《Java中注解与元数据示例详解》Java注解和元数据是编程中重要的概念,用于描述程序元素的属性和用途,:本文主要介绍Java中注解与元数据的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参... 目录一、引言二、元数据的概念2.1 定义2.2 作用三、Java 注解的基础3.1 注解的定义3.2 内

将sqlserver数据迁移到mysql的详细步骤记录

《将sqlserver数据迁移到mysql的详细步骤记录》:本文主要介绍将SQLServer数据迁移到MySQL的步骤,包括导出数据、转换数据格式和导入数据,通过示例和工具说明,帮助大家顺利完成... 目录前言一、导出SQL Server 数据二、转换数据格式为mysql兼容格式三、导入数据到MySQL数据