PCL 读取txt格式点云并可视化

news2024/11/14 14:21:00

目录

一、概述

1.1原理

1.2实现步骤

1.3应用场景

二、代码实现

2.1关键函数

2.2完整代码

三、实现效果


PCL点云算法汇总及实战案例汇总的目录地址链接:

PCL点云算法与项目实战案例汇总(长期更新)


一、概述

1.1原理

        TXT格式的点云文件通常以纯文本的形式存储点的坐标数据,每一行代表一个点的三维坐标(X, Y, Z)。通过读取这些坐标数据,可以将其转换为PCL格式的点云数据,并在PCL的可视化窗口中显示。

1.2实现步骤

  1. 打开并读取TXT格式的点云文件,逐行解析文件内容,提取点的三维坐标。
  2. 将提取的坐标信息存储到PCL的 pcl::PointCloud 对象中。
  3. 使用PCL可视化工具显示读取的点云数据。

1.3应用场景

  1. 简单点云数据可视化:TXT文件格式简单明了,适用于存储和共享基本的点云数据,可以快速读取并可视化。
  2. 数据预处理与验证:在数据预处理过程中,TXT格式的点云数据可以方便地进行手动检查和验证。
  3. 教学与研究:在教学和研究中,TXT格式常用于演示和实验点云处理算法的输入输出。

二、代码实现

2.1关键函数

1.TXT文件读取:
    - std::ifstream:用于打开和读取TXT文件。
    - std::istringstream:用于解析每一行的坐标数据。
2. 点云数据存储:
    - pcl::PointCloud<pcl::PointXYZ>:用于存储读取的点云数据。
3.点云可视化:
    - pcl::visualization::PCLVisualizer:创建一个可视化窗口并显示点云数据。
    - viewer->addPointCloud:将点云数据添加到可视化窗口中进行显示。

2.2完整代码

#include <iostream>
#include <fstream>
#include <sstream>
#include <pcl/point_types.h>
#include <pcl/visualization/pcl_visualizer.h>

// 封装的函数:从TXT文件加载点云数据并生成pcl::PointCloud<pcl::PointXYZ>对象
pcl::PointCloud<pcl::PointXYZ>::Ptr loadPointCloudFromTXT(const std::string& filename)
{
    // 1. 创建一个空的PointCloud对象,用于存储点云数据
    pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);

    // 2. 打开TXT文件
    std::ifstream infile(filename);  // 使用std::ifstream打开文件

    if (!infile.is_open())  // 如果文件无法打开,输出错误信息并返回空指针
    {
        std::cerr << "Error opening file: " << filename << std::endl;
        return nullptr;
    }

    std::string line;
    // 3. 逐行读取文件内容
    while (std::getline(infile, line))
    {
        std::istringstream iss(line);  // 使用std::istringstream解析每一行
        pcl::PointXYZ point;
        // 解析一行中的X, Y, Z坐标,并存储到point对象中
        if (!(iss >> point.x >> point.y >> point.z))
        {
            std::cerr << "Error parsing line: " << line << std::endl;
            break;  // 如果解析失败,输出错误信息并退出循环
        }
        cloud->points.push_back(point);  // 将解析的点添加到点云对象中
    }

    infile.close();  // 关闭文件

    // 4. 设置点云的基本属性
    cloud->width = cloud->points.size();  // 设置点云的宽度为点的数量
    cloud->height = 1;  // 设置点云的高度为1(表示这是一个无序点云)
    cloud->is_dense = true;  // 设置点云为稠密点云

    // 5. 返回生成的点云对象
    return cloud;
}

int main(int argc, char** argv)
{
    // 1. 使用封装的函数从TXT文件中加载点云数据
    pcl::PointCloud<pcl::PointXYZ>::Ptr cloud = loadPointCloudFromTXT("Elephant.txt");

    if (!cloud)  // 如果点云数据加载失败,退出程序
    {
        return -1;
    }

    // 2. 创建PCLVisualizer对象,用于显示点云数据
    pcl::visualization::PCLVisualizer::Ptr viewer(new pcl::visualization::PCLVisualizer("3D Viewer"));
    viewer->setBackgroundColor(0, 0, 0);  // 设置背景颜色为黑色
    viewer->addPointCloud<pcl::PointXYZ>(cloud, "sample cloud");  // 将点云数据添加到可视化窗口中
    viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, "sample cloud");  // 设置点的大小

    // 3. 启动可视化主循环
    while (!viewer->wasStopped())
    {
        viewer->spinOnce(100);  // 刷新窗口
    }

    return 0;
}

三、实现效果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2149714.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

高德地图JS API AMap.MouseTool绘制

fang &#x1f916; 作者简介&#xff1a;水煮白菜王 &#xff0c;一位资深前端劝退师 &#x1f47b; &#x1f440; 文章专栏&#xff1a; 高德AMap专栏 &#xff0c;记录一下平时在博客写作中&#xff0c;总结出的一些开发技巧✍。 感谢支持&#x1f495;&#x1f495;&#…

基于SpringBoot的校园二手商品交易平台的设计与实现

文未可获取一份本项目的java源码和数据库参考。 一、课题研究背景意义及现状 1.课题背景 随着社会的发展&#xff0c;低碳经济生活已成为当今世界发展的主题&#xff0c;物品循环利用、回收再造成为了社会关注的焦点。调查发现&#xff0c;随着大学生购买力的增强&#xff0…

李宏毅结构化学习 02

文章目录 一、上篇博文复习二、Separable Case三、Non-separable Case四、Considering Errors五、Regularization六、Structured SVM七、Cutting Plane Algorithm for Structured SVM八、Multi-class and binary SVM九、Beyond Structured SVM 一、上篇博文复习 图中x表示输入的…

CSS 复合选择器简单学习

目录 1. Emmet 语法 1.1 快速生成 HTML 结构语法 1.2 快速生成 CSS 样式 1.3 格式化工具 2. 调试 2.1 打开调试工具 2.2 使用调试工具 3. 复合选择器 3.1 后代选择器 3.2 子选择器 3.3 并集选择器 3.4 伪类选择器 3.3.1 链接伪类选择器 3.3.2 :focus 伪类选择器 …

C++入门 之 类和对象(下)

目录 一、初始化列表 二、隐式类型转换与explict 三、静态成员——static 四、友元 五、内部类 六、匿名对象 七.对象拷贝时的编译器优化 一、初始化列表 之前我们实现构造函数时&#xff0c;初始化成员变量主要使用函数体内赋值&#xff0c;构造函数初始化还有一种方式&…

【重学 MySQL】三十、数值类型的函数

【重学 MySQL】三十、数值类型的函数 基本函数角度与弧度互换函数三角函数指数与对数进制间的转换示例 基本函数 MySQL提供了一系列基本的数值函数&#xff0c;用于处理数学运算和数值转换。以下是一些常用的基本函数及其用法&#xff1a; 函数用法ABS(x)返回x的绝对值。SIGN…

Java 23、JDK 23正式发布!

9月18日消息&#xff0c;Java 23目前已经正式推出&#xff0c;这是继Java 22之后的又一个非长期支持&#xff08;LTS&#xff09;版本&#xff0c;Oracle 对此版本仅提供六个月的支持。 Java 23包含12个新的JEP&#xff08;JDK增强提案&#xff09;&#xff0c;其中包括其中包…

consul服务注册发现与配置中心

目录 1 consul安装与运行 1.1 下载方式 1.2 安装 1.3 启动 1.4 访问方式 2 consul 实现服务注册与发现 2.1 引入 2.2 服务注册 2.3 服务发现 3 consul配置中心 3.1 基础配置 Eureka已经停止更新了&#xff0c;consul是独立且和微服务功能解耦的注册中心&#xff0c;…

黎巴嫩通信设备爆炸初步分析

这两天比较轰动的事&#xff0c;当属中东地区发生的一系列通信设备爆炸事件。下面分析下怎么炸的 1、为什么要用传呼机 传呼机是上世纪八九十年代流行的通信装备&#xff0c;在中国大陆已经基本绝迹&#xff0c;但在世界范围内依然广泛使用&#xff0c;因此它的产业链还活着。…

如何快速修改CSDN代码块或者主题的字体颜色

第一步登录你的CSDN账号然后点击你的头像 第二步点击下拉框中的“内容管理” 第三步&#xff0c;点击“博客设置” 第四步&#xff0c;点击“等级”选择喜欢的主题和颜色 第五步&#xff0c;选择代码块的主题和颜色 最后保存刷新就可以了。

Mybatis Plus分页查询返回total为0问题

Mybatis Plus分页查询返回total为0问题 一日&#xff0c;乌云密布&#xff0c;本人看着mybatis plus的官方文档&#xff0c;随手写了个分页查询&#xff0c;如下 Page<Question> questionPage questionService.page(new Page<>(current, size),questionService.g…

一体化平台数据中心安全建设方案(Word完整原件)

第 一 章 信息安全保障系统 1.1 系统概述 1.2 安全标准 1.3 系统架构 1.4 系统详细设计 1.4.1 计算环境安全 1.4.2 区域边界安全 1.4.3 通信网络安全 1.4.4 管理中心安全 1.5 安全设备及系统 1.5.1 VPN加密系统 1.5.2 入侵防御系统 1.5.3 防火墙系统 1.5.4 安全审计系统 1.5.5 …

基于 ROS 的Terraform托管服务轻松部署ChatGLM2-6B

介绍 ChatGLM2-6B是开源中英双语对话模型ChatGLM-6B的第二代版本&#xff0c;在保留了初代模型对话流畅、部署门槛较低等众多优秀特性的基础上&#xff0c;ChatGLM2-6B具有更强大的性能、更长的上下文、更高效的推理等特性。 资源编排服务&#xff08;Resource Orchestration…

谈对象第二弹: C++类和对象(中)

文章目录 一、类的默认成员函数二、构造函数三、析构函数四、拷贝构造函数五、运算符重载5.1运算符重载5.2赋值运算符重载5.3实现日期类<<、>>重载检查、获取天数关系运算符重载算数、赋值运算符重载Date.hDate.cpp 六、取地址运算符重载6.1const成员函数6.2取地址…

PyTorch使用------自动微分模块

目录 &#x1f354; 梯度基本计算 1.1 单标量梯度的计算 1.2 单向量梯度的计算 1.3 多标量梯度计算 1.4 多向量梯度计算 1.5 运行结果&#x1f4af; &#x1f354; 控制梯度计算 2.1 控制不计算梯度 2.2 注意: 累计梯度 2.3 梯度下降优化最优解 2.4 运行结果&#x1…

在grafana上配置显示全部node资源信息概览

在grafana上配置显示全部node资源信息概览&#xff0c;便于巡检 1&#xff0c;注册grafana官网账号&#xff1a;Grafana dashboards | Grafana Labs&#xfeff; 2、寻找可以展示所有node资源概览信息的dashboard&#xff0c;并下载支持prometheus数据源的dashboard&#xff…

论文开题不用愁,5步带你轻松搞定研究计划!

开题报告是每位研究生在论文写作初期必须完成的一项重要任务。它不仅是对自己研究方向的初步规划&#xff0c;也是导师和评审专家衡量课题可行性的重要依据。一份优秀的开题报告不仅能够清晰阐述研究的背景、目的和意义&#xff0c;还能展示研究的创新性和可行性&#xff0c;从…

与谷歌旗下自动驾驶公司扩大合作后,Uber股票值得买入吗?

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 猛兽财经核心观点&#xff1a; &#xff08;1&#xff09;与Waymo扩大在无人驾驶出租车方面的合作后&#xff0c;Uber的股价上涨了5%。 &#xff08;2&#xff09;Uber的第二季度的财务业绩非常强劲&#xff0c;收入增长了…

【Python】练习:控制语句(二)第4关

第4关&#xff1a;控制结构综合实训 第一题第二题&#xff08;※&#xff09;第三题&#xff08;※&#xff09;第四题&#xff08;※&#xff09;第五题&#xff08;※&#xff09;第六题&#xff08;※&#xff09; 第一题 #第一题def rankHurricane(velocity):#请在下面编写…

[Simpfun游戏云1]搭建MC Java+基岩互通生存游戏服务器

众所周知&#xff0c;MC有多个客户端&#xff0c;像常见的比如Java Edition和基岩等&#xff0c;这就导致&#xff0c;比如我知道一个超级好玩的JE服务器&#xff0c;但我又想使用基岩版来玩&#xff0c;肯定是不行的&#xff0c;因为通讯协议不一样。 这就有一些人才发明了多…