PCL 点云基于高程渲染颜色

目录

一、概述

1.1原理

1.2实现步骤

1.3 应用场景

二、代码实现

2.1关键函数

2.2完整代码

三、实现效果


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

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


一、概述

        本文将介绍如何使用PCL库基于点云的高程(即点的Z坐标)来渲染颜色。高程渲染是一种根据点云中每个点的高度(Z值)来分配颜色的方法,可以帮助用户更直观地理解和分析点云数据中的高度变化。

1.1原理

        高程渲染通过将点云中每个点的Z坐标值映射为颜色,实现对高度的可视化。通常,较低的Z值映射为冷色调(如蓝色),较高的Z值映射为暖色调(如红色)。通过这种方式,可以直观地展示点云中高度的分布情况,特别是在地形分析、建筑测绘等应用中非常有用。

1.2实现步骤

  1. 读取点云数据,并将其转换为 pcl::PointCloud 类型。
  2. 遍历点云中的每个点,根据其Z坐标值计算对应的颜色。
  3. 将计算得到的颜色值分配给每个点。
  4. 使用PCL可视化工具显示基于高程渲染颜色的点云数据。

1.3 应用场景

  1. 地形分析:通过高程渲染,可以直观地展示地形的起伏变化,帮助分析地形特征。
  2. 建筑测绘:在建筑物扫描中,基于高程的渲染可以显示建筑物的高度分布。
  3. 环境监测:用于监测和可视化森林、山脉等自然环境的高度分布。

二、代码实现

2.1关键函数

1.颜色映射与分配:
        -pcl::PointCloud<pcl::PointXYZRGB>:用于存储带有颜色信息的点云数据。
        -颜色映射:根据点的Z坐标值计算颜色,并分配给点云中的每个点。
2.点云数据加载与可视化:
        -pcl::io::loadPCDFile:用于加载PCD格式的点云文件。
        -pcl::visualization::PCLVisualizer:创建一个可视化窗口,并显示点云数据。

2.2完整代码

#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/visualization/pcl_visualizer.h>
#include <algorithm>  // 包含std::min_element和std::max_elementint main(int argc, char** argv)
{// 1. 创建PointCloud对象,用于存储带有颜色信息的点云数据pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZRGB>);// 2. 读取点云数据pcl::PointCloud<pcl::PointXYZ>::Ptr inputCloud(new pcl::PointCloud<pcl::PointXYZ>);if (pcl::io::loadPCDFile("input.pcd", *inputCloud) == -1)  // 加载点云文件{PCL_ERROR("Couldn't read file input.pcd \n");return -1;}// 3. 计算点云的最小和最大Z值auto minmax_z = std::minmax_element(inputCloud->points.begin(), inputCloud->points.end(),[](const pcl::PointXYZ& p1, const pcl::PointXYZ& p2) {return p1.z < p2.z;});float min_z = minmax_z.first->z;float max_z = minmax_z.second->z;// 4. 将原始点云转换为带有颜色信息的点云cloud->width = inputCloud->width;cloud->height = inputCloud->height;cloud->is_dense = inputCloud->is_dense;cloud->points.resize(cloud->width * cloud->height);for (size_t i = 0; i < inputCloud->points.size(); ++i){cloud->points[i].x = inputCloud->points[i].x;cloud->points[i].y = inputCloud->points[i].y;cloud->points[i].z = inputCloud->points[i].z;// 计算颜色值,基于Z值进行映射float normalized_z = (inputCloud->points[i].z - min_z) / (max_z - min_z);cloud->points[i].r = static_cast<uint8_t>(255 * normalized_z);      // 红色分量cloud->points[i].g = static_cast<uint8_t>(255 * (1.0f - normalized_z));  // 绿色分量cloud->points[i].b = 128;  // 固定蓝色分量,或根据需要调整}// 5. 创建PCLVisualizer对象,用于显示点云数据pcl::visualization::PCLVisualizer::Ptr viewer(new pcl::visualization::PCLVisualizer("3D Viewer"));viewer->setBackgroundColor(0, 0, 0);  // 设置背景颜色为黑色viewer->addPointCloud<pcl::PointXYZRGB>(cloud, "elevation colored cloud");  // 添加带有高程渲染颜色的点云viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, "elevation colored cloud");  // 设置点的大小// 6. 启动可视化主循环while (!viewer->wasStopped()){viewer->spinOnce(100);  // 让可视化窗口刷新}return 0;
}

三、实现效果

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

搬砖人如何快速找回丢失的数据?盘点4款高效电脑数据恢复工具

各位上班的朋友们&#xff0c;是不是有时候一不小心&#xff0c;就发现自己好不容易存下来的数据找不着了&#xff1f;别慌哈&#xff0c;今天我这个懂点科技的人就来给大家说说几款特别实用的能电脑数据恢复的工具&#xff0c;让你轻轻松松把那些“跑丢了”的数据给找回来&…

【C语言】(指针系列四)回调函数+qsort函数

一、回调函数 回调函数就是通过函数指针调用的函数 如果你把函数的指针作为参数传递给另外一个函数&#xff0c;当这个指针被用来调用其所指向的函数时&#xff0c;被调用的函数就是回调函数。回调函数并不是一个单一的函数实现的&#xff0c;而是在某种情况下&#xff0c;编…

HighCharts图表自动化简介

什么是分析数据? 在任何应用程序中捕获并以图形或图表形式显示的分析数据是任何产品或系统的关键部分,因为它提供了对实时数据的洞察。 验证此类分析数据非常重要,因为不准确的数据可能会在报告中产生问题,并可能影响应用程序/系统的其他相关领域。 什么是HighChart? …

在 Java 中实现 Kafka Producer 的单例模式

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐&#xff1a;「storm…

怎么让手机ip地址变化?介绍几种实用方法

随着网络技术的发展&#xff0c;IP地址作为网络设备的唯一标识&#xff0c;其变动对于保护个人隐私、规避网络限制等方面具有重要意义。本文将介绍几种实用的方法&#xff0c;帮助用户实现手机IP地址的变化&#xff0c;并提醒注意事项。 一、连接不同的WiFi网络‌ 连接不同的W…

【初阶数据结构】详解树和二叉树(一) - 预备知识(我真的很想进步)

文章目录 前言1. 树1.1 树的概念1.2 树的相关概念1.3 树的表示1.4 树在实际中的运用 2. 二叉树2.1 二叉树的概念2.2 现实中的二叉树2.3 特殊的二叉树2.4 二叉树的性质2.5 二叉树概念和性质的一些习题 前言 初阶数据结构篇马上要迎来了一个新的成员&#xff0c;那就是"二叉…

Linux基础---07文件传输(网络和Win文件)

Linux文件传输地图如下&#xff0c;先选取你所需的场景&#xff0c;若你是需要Linux和Linux之间传输文件就查看SCP工具即可。 一.下载网站文件 前提是有网&#xff1a; 检查网络是否畅通命令&#xff1a;ping www.baidu.com&#xff0c;若有持续的返回值就说明网络畅通。Ctr…

stm32 W25Q数据存储

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、cubemx配置二、keil中文件修改与配置三、几个重要函数的说明四、DMA方式传输&#xff08;待写&#xff09;总结 前言 W25Q128 容量为128位 128/8 16 也就…

0x07 Nginx越界读取缓存漏洞 CVE-2017-7529 复现

参考&#xff1a; Nginx越界读取缓存漏洞 CVE-2017-7529 | PeiQi文库 (wgpsec.org)Nginx越界读取缓存漏洞&#xff08;CVE-2017-7529&#xff09;复现分析 - qweg_focus - 博客园 (cnblogs.com) 一、漏洞描述&#xff1a; 在Nginx的反向代理配置中&#xff0c;静态文件缓存包…

国产化中间件正在侵蚀开源中间件

开源中间件的发展趋势表明&#xff0c;它们将继续在技术创新和生态建设中发挥重要作用&#xff0c;尤其是在云计算、大数据等新兴技术领域。开源中间件如Apache Kafka、RabbitMQ、ActiveMQ和RocketMQ等在市场上有着广泛的应用。它们在技术社区中得到了良好的支持&#xff0c;并…

SpringBoot 处理 @KafkaListener 消息

消息监听容器 1、KafkaMessageListenerContainer 由spring提供用于监听以及拉取消息&#xff0c;并将这些消息按指定格式转换后交给由KafkaListener注解的方法处理&#xff0c;相当于一个消费者&#xff1b; 看看其整体代码结构&#xff1a; 可以发现其入口方法为doStart(),…

Linux 访问控制列表(Access Control List)

在Linux中&#xff0c;目录或文件的权限是针对的所有者(owner)&#xff0c;所属组(group)&#xff0c;其他人(others)这3种类别来设置的。这种根据类别控制权限的方法无法精确控制每个用户的行为。为了解决这个问题&#xff0c;Linux引入了访问控制列表&#xff08;Access Cont…

Navicat 17 新特性 | 聚焦 MongoDB

随着 Navicat 17 的盛大发布&#xff0c;其一系列创新特性赢得了广大用户的热烈反响。它不仅在模型设计上实现了突破性优化&#xff0c;提升了查询与配置的效率&#xff0c;还大幅优化了用户界面的交互体验&#xff0c;原生支持国产平台与操作系统&#xff0c;同时增强 BI 能力…

JAVA毕业设计170—基于Java+Springboot+vue3+小程序的房屋租赁小程序系统(源代码+数据库)

毕设所有选题&#xff1a; https://blog.csdn.net/2303_76227485/article/details/131104075 基于JavaSpringbootvue3小程序的房屋租赁小程序系统(源代码数据库)170 一、系统介绍 本项目前后端分离(可以改为ssm版本)&#xff0c;分为用户、房东、管理员三种角色 1、用户&am…

Qt+FFmpeg开发视频播放器笔记(三):音视频流解析封装

音频解析 音频解码是指将压缩的音频数据转换为可以再生的PCM(脉冲编码调制)数据的过程。 FFmpeg音频解码的基本步骤如下: 初始化FFmpeg解码器(4.0版本后可省略): 调用av_register_all()初始化编解码器。 调用avcodec_register_all()注册所有编解码器。 打开输入的音频流:…

Idea springboot项目热部署

使用 spring-boot-devtools spring-boot-devtools 是 Spring Boot 提供的开发工具模块&#xff0c;它可以自动检测到代码的变化并重启应用&#xff0c;实现热部署。 配置步骤&#xff1a; 添加依赖&#xff1a; 在项目的 pom.xml 中加入 spring-boot-devtools 依赖&#xff1…

Redis(主从复制、哨兵模式、集群)概述及部署测试

目录 一、Redis 主从复制 1.1、Redis 主从复制概念 1.2、主从复制的作用 1.3、主从复制流程 1.4、搭建Redis 主从复制 二、Redis 哨兵模式 2.1、Redis 哨兵模式概念 2.2、哨兵模式原理 2.3、哨兵模式的作用 2.4、哨兵模式的结构 2.5、故障转移机制 2.6、主节点的选…

Node.js 多版本安装与切换指南

一.使用nvm的方法 1. 卸载nodejs 如果你的电脑有安装nodejs&#xff0c;需要先卸载掉&#xff1b;若没有请直接下一步。 2. 前往官网下载nvm nvm&#xff1a;一个nodejs版本管理工具&#xff01; 官网地址&#xff1a;nvm文档手册 - nvm是一个nodejs版本管理工具 - nvm中文…

MySQL详解:数据类型、约束

MySQL 1. 数据类型1.1 数值类型1.1.1 bit 位类型1.1.2 整数数据类型1.1.3 小数类型floatdecimal 1.2 字符类型1.2.1 char1.2.2 varchar 可变长字符串1.2.3 日期和时间类型datedatetimetimestamp 1.2.4 enum1.2.5 set集合查询函数 find_in_set 2. 表的约束2.1 NULL 空属性2.2 默…

基于鸿蒙API10的RTSP播放器(七:亮度调节功能测试)

目标&#xff1a; 当我的手指在设备左方进行上下移动的时候&#xff0c;可以进行屏幕亮度的调节&#xff0c;在调节的同时&#xff0c;有实时的调节进度条显示 步骤&#xff1a; 界面逻辑&#xff1a;使用Stack() 组件&#xff0c;完成音量图标和进度条的组合显示&#xff0c…