当前位置: 首页 > news >正文

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

目录

一、概述

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;
}

三、实现效果

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Cron表达式学习
  • 机器狗与无人机空地协调技术分析
  • 自注意力与多头自注意力的区别
  • 基于yolov5的不同颜色安全帽检测系统python源码+onnx模型+评估指标曲线+精美GUI界面
  • Virtuoso服务在centos中自动停止的原因分析及解决方案
  • js中的 赋值 浅拷贝 和 深拷贝 详细解读
  • Knowledge Graph Large Language Model (KG-LLM) for Link Prediction
  • QT应用开发的C++功能框架以及实战入门开发项目场景
  • 智慧交通,智能消防系统助力高铁站安全
  • [Linux]自定义shell详解
  • SpringBoot 基于 Vue 的地方美食分享网站
  • 秦时明月6.2魔改版+GM工具+虚拟机一键端
  • 图片压缩格式自适应,真的很省流量!
  • 鸿蒙OpenHarmony【轻量系统内核通信机制(消息队列)】子系统开发
  • --芯片测试--
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
  • Apache Spark Streaming 使用实例
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
  • Javascript弹出层-初探
  • Linux快速复制或删除大量小文件
  • Netty+SpringBoot+FastDFS+Html5实现聊天App(六)
  • nodejs:开发并发布一个nodejs包
  • Redash本地开发环境搭建
  • SegmentFault 2015 Top Rank
  • SSH 免密登录
  • Wamp集成环境 添加PHP的新版本
  • windows-nginx-https-本地配置
  • 纯 javascript 半自动式下滑一定高度,导航栏固定
  • 对JS继承的一点思考
  • 将 Measurements 和 Units 应用到物理学
  • 算法之不定期更新(一)(2018-04-12)
  • 为视图添加丝滑的水波纹
  • 正则学习笔记
  • 智能网联汽车信息安全
  • 主流的CSS水平和垂直居中技术大全
  • 好程序员大数据教程Hadoop全分布安装(非HA)
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • 小白应该如何快速入门阿里云服务器,新手使用ECS的方法 ...
  • ​浅谈 Linux 中的 core dump 分析方法
  • ​虚拟化系列介绍(十)
  • #if和#ifdef区别
  • #数学建模# 线性规划问题的Matlab求解
  • (1)(1.13) SiK无线电高级配置(六)
  • (1)安装hadoop之虚拟机准备(配置IP与主机名)
  • (ZT)一个美国文科博士的YardLife
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (二)十分简易快速 自己训练样本 opencv级联lbp分类器 车牌识别
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (十五)devops持续集成开发——jenkins流水线构建策略配置及触发器的使用
  • (算法二)滑动窗口
  • (正则)提取页面里的img标签
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程