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.xdnf.cn/news/1535428.html

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

相关文章

[通信原理]绪论2:信息量 × 信息熵

我们知道信息是一个抽象的概念&#xff0c;它既不是物质也不是能量。那么我们要如何对一个抽象的概念进行一个定量的研究呢&#xff1f; 信息量 1、信息的度量 通信的本质是传递信息&#xff0c;为了定量表征信息的度量&#xff0c;引入信息量的概念。消息中所含信息量与其不…

AIGC-初体验

线性分类 提问&#xff0c;目的试图让AI自动线性分类 A类&#xff1a;(10,21),&#xff08;3,7&#xff09;,(9,20&#xff09;(121,242) B类&#xff1a;(3,9),(5,11),(70,212),(11,34) 根据线性关系分类 请问 (100,300)&#xff0c;&#xff08;100&#xff0c;201&#xff…

Netty笔记06-组件ByteBuf

文章目录 概述ByteBuf 的特点ByteBuf的组成ByteBuf 的生命周期 ByteBuf 相关api1. ByteBuf 的创建2. 直接内存 vs 堆内存3. 池化 vs 非池化4. ByteBuf写入代码示例 5. ByteBuffer扩容6. ByteBuf 读取7. retain() & release()TailContext 释放未处理消息逻辑HeadContext 8. …

2024最新版零基础学习Modbus通信协议(保姆级教程)

合集 - 上位机开发(2) 1.零基础学习Modbus通信协议09-13 2.RS485与ModbusRTU09-10 收起 大家好&#xff01;我是付工。 2012年开始接触Modbus协议&#xff0c;至今已经有10多年了&#xff0c;从开始的懵懂&#xff0c;到后来的顿悟&#xff0c;再到现在的开悟&#xff0c;…

YOLOv8改进 | 融合改进 | C2f融合重写星辰网络⭐以及CAA【二次融合 +​ CVPR2024】

秋招面试专栏推荐 &#xff1a;深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 &#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 专栏目录 &#xff1a;《YOLOv8改进有效…

win10安装JDK12并配置环境

Java SE 、Java EE和Java ME的区别 Java SE&#xff08;Standard Edition&#xff09;‌ 是Java语言的标准版&#xff0c;也被称为Java平台标准版。 Java EE&#xff08;Enterprise Edition&#xff09;‌ 是基于Java SE构建的企业版&#xff0c;专门用于开发企业级应用。它扩…

ESP32聊天机器人之一

想做情感陪伴机器人&#xff0c;看到B站有个项目很有趣&#xff0c;使用一块esp32复刻了B站MeteWu的ESP32大模型聊天项目。 自己做了一些修改&#xff0c;加了一些简单的表情&#xff0c;角色扮演&#xff0c;切换大模型和温湿度传感器等功能。可以用于玩具&#xff0c;聊天机…

【React源码解析】深入理解react时间切片和fiber架构

时间切片 假如React一个更新需要耗时200ms&#xff0c;我们可以将其拆分为40个5ms的更新&#xff08;后续会讲到如何拆分&#xff09;&#xff0c;然后每一帧里只花5ms来执行更新。那么&#xff0c;每一帧里不就剩余16.7 - 5 11.7ms的时间可以进行用户事件&#xff0c;渲染等…

立足本土,面向全球 | 全视通闪耀亮相Medical Fair Asia新加坡医疗展

Medical Fair Asia是亚洲地区最大的医疗设备、医疗器械和医疗技术展览会之一&#xff0c;自1997年创办以来&#xff0c;每两年在新加坡举办一次。该展会不仅是新加坡医疗行业交流的龙头平台&#xff0c;也是亚洲乃至全球医疗企业和专业人士共聚一堂、展示最新产品和技术的重要舞…

非关系型数据库Redis

文章目录 一&#xff0c;关系型数据库和非关系型数据可区别1.关系型数据库2.非关系型数据库3.区别3.1存储方式3.2扩展方式3.2事务性的支持 二&#xff0c;非关系型数据为什么产生三&#xff0c;Redis1.Redis是什么2.Redis优点3.Redis适用范围4. Redis 快的原因4.1 基于内存运行…

某讯/企鹅滑块验证码逆向(一)

文章目录 免责声明前言请求分析collect参数 总结 免责声明 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;不提供完整代码&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由…

面试爱考 | 设计模式

一、概述二、创建型 1. 单例&#xff08;Singleton&#xff09; IntentClass DiagramImplementationExamplesJDK 2. 简单工厂&#xff08;Simple Factory&#xff09; IntentClass DiagramImplementation 3. 工厂方法&#xff08;Factory Method&#xff09; IntentClass Diagr…

C/C++教程学习视频网盘资源分享

正如大家所了解的&#xff0c;C语言和C是两种编程语言&#xff0c;它们有一些相似之处&#xff0c;也有一些明显的区别。今天与大家一起来探讨、学习和回顾一下&#xff0c;希望对正在学习或准备学习编程语言的小伙伴&#xff0c;能有帮助哦&#xff01; C/C区别之处&#xff…

Linux环境使用Git同步教程

&#x1f4d6; 前言&#xff1a;由于CentOS 7已于2024年06月30日停止维护&#xff0c;为了避免操作系统停止维护带来的影响&#xff0c;我们将把系统更换为Ubuntu并迁移数据&#xff0c;在此之前简要的学习Git的上传下载操作。 目录 &#x1f552; 1. 连接&#x1f558; 1.1 配…

路由策略原理与配置

&#x1f423;个人主页 可惜已不在 &#x1f424;这篇在这个专栏 华为_可惜已不在的博客-CSDN博客 &#x1f425;有用的话就留下一个三连吧&#x1f63c; 目录 一. 原理概述 二. 实验目的 实验内容 实验拓扑 实验配置 三. 实验结果 一. 原理概述 路由策略Route-P…

【docker】docker 关键技术 —— 镜像制作

docker 镜像制作 镜像制作及原因Docker 镜像制作方式快照方式制作镜像制作命令 Dockerfile 制作镜像Dockerfile 是什么Dockerfile 格式为什么需要 Dockerfilegitee 详细使用 Dockerfile 教程 镜像制作及原因 镜像制作是因为某种需求&#xff0c;官方的镜像无法满足需求&#x…

Docker基本使用(持续更新中)

1 常用命令 1.1保存镜像到本地 命令如下: docker save -o nginx.tar nginx:latest 举例 结果&#xff1a;在当前目录下多了一个nginx.tar的包 1.2加载本地镜像 命令如下&#xff1a; docker load -i nginx.tar 举例&#xff1a; 查看当前镜像是没有nginx的 加载本地镜…

C++入门基础知识67(高级)——【关于C++ 文件和流】

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【14后&#x1f60a;///C爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于C 文件和流的相关内容&#xff01; 关于…

数据库索引底层数据结构之B+树MySQL中的页索引分类【纯理论干货,面试必备】

目录 1、索引简介 1.1 什么是索引 1.2 使用索引的原因 2、索引中数据结构的设计 —— B树 2.1 哈希 2.2 二叉搜索树 2.3 B树 2.4 最终选择之——B树 2.4.1 B树与B树的对比(面向索引)【面试题】 3、MySQL中的页 3.1 页的使用原因 3.2 页的结构 3.2.1 页文件头和页文件…

【批量图片发票识别表格】批量识别发票明细导出Excel表格,批量识别扫描发票,批量识别拍照发票,发票识别改名

我们在生活中有很多发票要处理&#xff0c;有的是扫描的图片&#xff0c;有的是拍照的图片&#xff0c;需要将这些发票的信息导出整理成Excel表格&#xff0c;手打一两张还可以&#xff0c;数量大是不太现实的&#xff0c;那么今天教下大家如何快速的将这些发票整理下Excel表格…