PCL 读取和保存点云

news2024/11/16 1:57:42

目录

一、概述

1.1原理

1.2实现步骤

二、代码实现

2.1关键函数

2.2完整代码

三、实现效果


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

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


一、概述

1.1原理

        PCL (Point Cloud Library) 是一个用于处理 3D 点云数据的开源库。在处理点云数据时,常见的任务包括点云的读写和可视化。PCL 提供了强大的 IO 模块来读取和写入各种格式的点云文件,并且提供了可视化模块来对点云进行渲染和显示。点云的读写与显示是很多 3D 数据处理任务的基础步骤,通过这些步骤,可以对点云进行预处理、分析和操作。

1.2实现步骤

  1. 读取点云:使用 PCL 的 pcl::io::loadPCDFile pcl::io::loadPLYFile 函数读取点云数据文件(如 PCD 或 PLY 文件)。
  2. 显示点云:使用 PCL 的 pcl::visualization::PCLVisualizer 类创建一个可视化窗口,并将点云添加到该窗口中。
  3. 写入点云:使用 pcl::io::savePCDFilepcl::io::savePLYFile 函数将处理后的点云数据保存为文件。

二、代码实现

2.1关键函数

1.读取点云:
        a.pcl::io::loadPCDFile<pcl::PointXYZ>:从 PCD 文件读取点云数据。
        b.pcl::io::loadPLYFile<pcl::PointXYZ>:从 PLY 文件读取点云数据。
2.显示点云:
        a.pcl::visualization::PCLVisualizer:创建可视化对象。
        b.addPointCloud<pcl::PointXYZ>:将点云数据添加到可视化对象中进行显示。
3.写入点云:
        a.pcl::io::savePCDFile<pcl::PointXYZ>:将点云数据保存为 PCD 文件。
        b.pcl::io::savePLYFile<pcl::PointXYZ>:将点云数据保存为 PLY 文件。

2.2完整代码

#include <pcl/io/pcd_io.h>
#include <pcl/io/ply_io.h>
#include <pcl/point_types.h>
#include <pcl/visualization/pcl_visualizer.h>

int main(int argc, char** argv)
{
    // 1. 创建一个 PointCloud 智能指针对象
    pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);

    // 2. 读取点云数据文件 (PCD 或 PLY)
    if (pcl::io::loadPCDFile<pcl::PointXYZ>("C:\\cloud_data\\pcd_data\\bunny.pcd", *cloud) == -1) // 对于 PCD 文件
    {
        PCL_ERROR("Couldn't read the PCD file \n");
        return (-1);
    }
    // 如果读取 PLY 文件
    // if (pcl::io::loadPLYFile<pcl::PointXYZ>("input.ply", *cloud) == -1)
    // {
    //     PCL_ERROR("Couldn't read the PLY file \n");
    //     return (-1);
    // }

    // 3. 初始化可视化对象
    pcl::visualization::PCLVisualizer::Ptr viewer(new pcl::visualization::PCLVisualizer("3D Viewer"));
    viewer->setBackgroundColor(0, 0, 0); // 设置背景色为黑色

    // 4. 将点云添加到可视化窗口中
    viewer->addPointCloud<pcl::PointXYZ>(cloud, "sample cloud");

    // 5. 可选设置:调整点的尺寸
    viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, "sample cloud");

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

    // 7. 将点云数据保存到文件中
    pcl::io::savePCDFile<pcl::PointXYZ>("output.pcd", *cloud); // 保存为 PCD 文件
    // pcl::io::savePLYFile<pcl::PointXYZ>("output.ply", *cloud); // 保存为 PLY 文件

    return 0;
}

三、实现效果

e4c21e33ef824fe4a8cb05584c923285.png

 

 

 

 

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

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

相关文章

开源免费的工贸一体行业ERP管理系统

引言 在当今数字化浪潮汹涌澎湃的时代&#xff0c;中小企业面临着前所未有的挑战与机遇。如何实现数字化转型发展&#xff0c;成为了众多中小企业主心头的大事。 据相关数据显示&#xff0c;目前我国中小企业数量已经超过了 4000 万户&#xff0c;然而成功实现数字化转型的比例…

单向链表之创建,插入,输出(下)

文章目录 &#x1f34a;自我介绍&#x1f34a;插入&#xff08;下&#xff09;尾插法有序插入&#xff1a;按照指定顺序插入 你的点赞评论就是对博主最大的鼓励 当然喜欢的小伙伴可以&#xff1a;点赞关注评论收藏&#xff08;一键四连&#xff09;哦~ &#x1f34a;自我介绍 H…

Arduino 2线串行 通信 驱动 LCD 12864

上效果图片 源代码 Arduino 328p /****************************************************************** 2线 LCD 12864 (屏幕主控芯片 ST7920)******************************************************************//***********************端口/引脚定义区域************…

Golang | Leetcode Golang题解之第401题二进制手表

题目&#xff1a; 题解&#xff1a; func readBinaryWatch(turnedOn int) (ans []string) {for i : 0; i < 1024; i {h, m : i>>6, i&63 // 用位运算取出高 4 位和低 6 位if h < 12 && m < 60 && bits.OnesCount(uint(i)) turnedOn {ans …

WPF创建不规则窗体时WebBrowser控件不显示的问题

最近有小伙伴需要在不规则窗体上放置WebBrowser控件&#xff0c;因为设置了WindowStyle"None" 和 AllowsTransparency"True"。 导致WebBrowser控件不显示。 界面代码如下所示&#xff1a; 1 <Window x:Class"WebBrowserDemo.MainWindow" …

【CTF Web】BUUCTF BUU UPLOAD COURSE 1 Writeup(文件上传+PHP+文件包含漏洞)

BUU UPLOAD COURSE 1 1 上课用~ 点击启动靶机。 解法 疑似存在文件包含漏洞。 http://15a5666e-1796-4f76-b892-0b69cf97df8e.node5.buuoj.cn:81/index.php?fileupload.php查看网页源代码。判断是后端检查。 <!DOCTYPE html> <html lang"zh-cn"> &…

区块链Dapp开发:质押挖矿的各模式开发详解

质押挖矿是区块链去中心化金融&#xff08;DeFi&#xff09;生态系统中的核心部分&#xff0c;吸引了大量用户参与。随着Dapp&#xff08;去中心化应用&#xff09;的普及&#xff0c;质押挖矿的模式多样化发展&#xff0c;不同模式各有其优点和风险。本文将介绍质押挖矿的基本…

SpringBoot快速接入OpenAI大模型(JDK8)

使用AI4J快速接入OpenAI大模型 本博文给大家介绍一下如何使用AI4J快速接入OpenAI大模型&#xff0c;并且如何实现流式与非流式的输出&#xff0c;以及对函数调用的使用。 介绍 由于SpringAI需要使用JDK17和Spring Boot3&#xff0c;但是目前很多应用依旧使用的JDK8版本&…

计算机毕业设计选题推荐-校园车辆管理系统-Java/Python项目实战(亮点:数据可视化分析、账号锁定)

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

最新版微服务项目搭建

一&#xff0c;项目总体介绍 在本项目中&#xff0c;我将使用alibabba的 nacos 作为项目的注册中心&#xff0c;使用 spring cloud gateway 做为项目的网关&#xff0c;用 openfeign 作为服务间的调用组件。 项目总体架构图如下&#xff1a; 注意&#xff1a;我的Java环境是17…

C语言-数据结构 弗洛伊德算法(Floyd)邻接矩阵存储

弗洛伊德算法相比迪杰斯特拉相似的地方都是遍历邻接矩阵不断调整最短路径的信息&#xff0c;并且两种算法面对多源最短路径的时间复杂度都是O(n^3)&#xff0c;Floyd采用的是动态规划而Dijkstra是采用贪心的思想。在Floyd中我们将创建两个数组进行辅助&#xff0c;一个path二维…

swift qwen2-vl推理及加载lora使用案例

参考: https://swift.readthedocs.io/zh-cn/latest/Instruction/LLM%E5%BE%AE%E8%B0%83%E6%96%87%E6%A1%A3.html#%E5%BE%AE%E8%B0%83%E5%90%8E%E6%A8%A1%E5%9E%8B https://blog.csdn.net/weixin_42357472/article/details/142150209 SWIFT支持300+ LLM和50+ MLLM(多模态大模型…

MySQL主从同步延时高问题排查

文章目录 背景数据库性能指标1、sysbench工具安装1.1、yum方式在线安装1.2、离线安装1.3、sysbench简介 2、主从延时过高问题排查流程2.1、登录从库查看从库状态、事务及相关进程2.2、查看服务器磁盘、cpu等信息2.3、使用fio命令压测数据盘性能2.3.1、安装fio工具2.3.2、执行磁…

element-plus组件问题汇总

element-plus组件问题汇总 一、el-select 1. 下拉选项实现添加全部 问题描述&#xff1a;value为空时&#xff0c;select框中不显示全部选项&#xff0c;但是下拉列表中全部显示是勾选状态 图片&#xff1a; 解决办法&#xff1a;添加 :empty-values“[null, undefined]” …

基于Java+Mysql实现(WEB)宿舍管理系统

数据库实践课程之宿舍管理系统 一、系统需求分析 1.1 系统描述 随着社会的发展以及教育水平的提高&#xff0c;当今社会在校生的数量越来越庞大&#xff0c;使用传统的方式对学生的信息进行管理效率非常低下。在互联网技术高度发达的今天&#xff0c;使用数据库技术对学生的…

Golang | Leetcode Golang题解之第400题第N位数字

题目&#xff1a; 题解&#xff1a; func findNthDigit(n int) int {d : 1for count : 9; n > d*count; count * 10 {n - d * countd}index : n - 1start : int(math.Pow10(d - 1))num : start index/ddigitIndex : index % dreturn num / int(math.Pow10(d-digitIndex-1)…

Redis高可用,Redis性能管理

文章目录 一&#xff0c;Redis高可用&#xff0c;Redis性能管理二&#xff0c;Redis持久化1.RDB持久化1.1触发条件&#xff08;1&#xff09;手动触发&#xff08;2&#xff09;自动触发 1.2 Redis 的 RDB 持久化配置1.3 RDB执行流程(1) 判断是否有其他持久化操作在执行(2) 父进…

Unity开发一个FPS游戏之五

这个系列的前几篇文章介绍了如何从头开始用Unity开发一个FPS游戏&#xff0c;感兴趣的朋友可以回顾一下。这个系列的文章如下&#xff1a; Unity开发一个FPS游戏_unity 模仿开发fps 游戏-CSDN博客 Unity开发一个FPS游戏之二_unity 模仿开发fps 游戏-CSDN博客 Unity开发一个F…

828华为云征文|华为云Flexus X服务器centos挂载新增的磁盘教程

华为云Flexus X服务器推荐公司、企事业单位及生产环境使用&#xff0c;特别注重安全和稳定性 &#x1f680;【828华为云盛典&#xff0c;Flexus X引领算力新纪元&#xff01;】&#x1f680; 在数字化转型的征途中&#xff0c;数据安全是企业最坚实的后盾。华为云Flexus X实例…

中关村科金推出得助音视频鸿蒙SDK,助力金融业务系统鸿蒙化提速

鸿蒙生态大势所趋&#xff0c;各种应用适配加速 近日&#xff0c;华为纯血鸿蒙系统&#xff08;HarmonyOS NEXT&#xff09;再度引发市场高度关注。据媒体消息&#xff0c;鸿蒙NEXT Beta版将在9月24日对Mate 60系列、X5系列、Pura70系列等16款旗舰机型进行推送&#xff0c;这已…