点云数据介绍

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

相关文章

canal实现mysql数据同步的详细过程

《canal实现mysql数据同步的详细过程》:本文主要介绍canal实现mysql数据同步的详细过程,本文通过实例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的... 目录1、canal下载2、mysql同步用户创建和授权3、canal admin安装和启动4、canal

MybatisPlus service接口功能介绍

《MybatisPlusservice接口功能介绍》:本文主要介绍MybatisPlusservice接口功能介绍,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友... 目录Service接口基本用法进阶用法总结:Lambda方法Service接口基本用法MyBATisP

使用SpringBoot整合Sharding Sphere实现数据脱敏的示例

《使用SpringBoot整合ShardingSphere实现数据脱敏的示例》ApacheShardingSphere数据脱敏模块,通过SQL拦截与改写实现敏感信息加密存储,解决手动处理繁琐及系统改... 目录痛点一:痛点二:脱敏配置Quick Start——Spring 显示配置:1.引入依赖2.创建脱敏

MySQL复杂SQL之多表联查/子查询详细介绍(最新整理)

《MySQL复杂SQL之多表联查/子查询详细介绍(最新整理)》掌握多表联查(INNERJOIN,LEFTJOIN,RIGHTJOIN,FULLJOIN)和子查询(标量、列、行、表子查询、相关/非相关、... 目录第一部分:多表联查 (JOIN Operations)1. 连接的类型 (JOIN Types)

详解如何使用Python构建从数据到文档的自动化工作流

《详解如何使用Python构建从数据到文档的自动化工作流》这篇文章将通过真实工作场景拆解,为大家展示如何用Python构建自动化工作流,让工具代替人力完成这些数字苦力活,感兴趣的小伙伴可以跟随小编一起... 目录一、Excel处理:从数据搬运工到智能分析师二、PDF处理:文档工厂的智能生产线三、邮件自动化:

Python数据分析与可视化的全面指南(从数据清洗到图表呈现)

《Python数据分析与可视化的全面指南(从数据清洗到图表呈现)》Python是数据分析与可视化领域中最受欢迎的编程语言之一,凭借其丰富的库和工具,Python能够帮助我们快速处理、分析数据并生成高质... 目录一、数据采集与初步探索二、数据清洗的七种武器1. 缺失值处理策略2. 异常值检测与修正3. 数据

pandas实现数据concat拼接的示例代码

《pandas实现数据concat拼接的示例代码》pandas.concat用于合并DataFrame或Series,本文主要介绍了pandas实现数据concat拼接的示例代码,具有一定的参考价值,... 目录语法示例:使用pandas.concat合并数据默认的concat:参数axis=0,join=

java中BigDecimal里面的subtract函数介绍及实现方法

《java中BigDecimal里面的subtract函数介绍及实现方法》在Java中实现减法操作需要根据数据类型选择不同方法,主要分为数值型减法和字符串减法两种场景,本文给大家介绍java中BigD... 目录Java中BigDecimal里面的subtract函数的意思?一、数值型减法(高精度计算)1.

C#代码实现解析WTGPS和BD数据

《C#代码实现解析WTGPS和BD数据》在现代的导航与定位应用中,准确解析GPS和北斗(BD)等卫星定位数据至关重要,本文将使用C#语言实现解析WTGPS和BD数据,需要的可以了解下... 目录一、代码结构概览1. 核心解析方法2. 位置信息解析3. 经纬度转换方法4. 日期和时间戳解析5. 辅助方法二、L

Pytorch介绍与安装过程

《Pytorch介绍与安装过程》PyTorch因其直观的设计、卓越的灵活性以及强大的动态计算图功能,迅速在学术界和工业界获得了广泛认可,成为当前深度学习研究和开发的主流工具之一,本文给大家介绍Pyto... 目录1、Pytorch介绍1.1、核心理念1.2、核心组件与功能1.3、适用场景与优势总结1.4、优