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

PCL 点云随机渲染颜色

目录

一、概述

1.1原理

1.2实现步骤

1.3 应用场景

二、代码实现

2.1关键函数

2.2完整代码

三、实现效果


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

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


一、概述

        本文将介绍如何使用PCL库为点云中的每个点随机渲染颜色,并在PCL的可视化窗口中显示。这种方法适用于需要对点云中的不同点进行颜色区分的场景,可以帮助更直观地观察和分析点云数据。

1.1原理

        在点云处理中,颜色渲染是为了增强可视化效果,使不同的点在视觉上更易于区分。通过为点云中的每个点分配随机颜色,可以在可视化窗口中展示一个色彩丰富的点云模型。PCL提供了 pcl::PointXYZRGB 数据类型,该类型可以存储点的三维坐标和颜色信息。通过遍历点云中的每个点,并为每个点分配随机的RGB值,即可实现随机颜色渲染。

1.2实现步骤

  1. 加载点云数据,并将其转换为 pcl::PointCloud 类型。
  2. 遍历点云中的每个点,为其分配随机的RGB颜色值。
  3. 使用PCL可视化工具显示随机颜色渲染后的点云数据。

1.3 应用场景

  1. 可视化效果增强:通过随机颜色渲染,可以提高点云数据的可视化效果,使点云模型更加生动和易于观察。
  2. 数据分析与调试:在数据分析和调试过程中,随机颜色渲染可以帮助快速识别和区分点云中的不同部分。
  3. 三维模型展示:在三维模型展示中,随机颜色渲染可以增加模型的美观性和可读性,特别是在复杂模型中突出显示不同的点。

二、代码实现

2.1关键函数

1.颜色渲染与分配:
        -pcl::PointCloud<pcl::PointXYZRGB>:用于存储带有颜色信息的点云数据。
        -rand():生成随机数,用于生成随机的RGB颜色值。
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 <cstdlib>  // 包含rand()函数的头文件

int 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. 将原始点云转换为带有颜色信息的点云
    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;

        // 生成随机颜色
        cloud->points[i].r = rand() % 256;  // 随机生成0-255之间的红色分量
        cloud->points[i].g = rand() % 256;  // 随机生成0-255之间的绿色分量
        cloud->points[i].b = rand() % 256;  // 随机生成0-255之间的蓝色分量
    }

    // 4. 创建PCLVisualizer对象,用于显示点云数据
    pcl::visualization::PCLVisualizer::Ptr viewer(new pcl::visualization::PCLVisualizer("3D Viewer"));
    viewer->setBackgroundColor(0, 0, 0);  // 设置背景颜色为黑色
    viewer->addPointCloud<pcl::PointXYZRGB>(cloud, "random colored cloud");  // 添加带有随机颜色的点云
    viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, "random colored cloud");  // 设置点的大小

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

    return 0;
}

三、实现效果


http://www.kler.cn/news/305982.html

相关文章:

  • 3285、找到稳定山的下标
  • 华为CNA VRM搭建(使用vmware worfstartion搭建)
  • 【Python】开发环境配置
  • Python的Scapy库详解
  • 关于 OceanBase 4.x 中被truncate的 table 不再支持进回收站的原因
  • 聚观早报 | 2025款比亚迪汉上市;iPhone 16天猫全球同步首发
  • GEO数据的下载和处理|GEO数据转换为Gene symbol|GEO注释文件提取symbol|查看样本标签|查看GEO数据疾病或正常|生物信息基础
  • 后端开发刷题 | 矩阵的最小路径和
  • 语言模型中的多模态链式推理(论文复现)
  • CSS—4
  • Go语言现代web开发defer 延迟执行
  • 【Linux 20】进程控制
  • 网络原理 IP协议与以太网协议
  • 匹配行最大值替换为最小值公式
  • 反射是一个新的AI模型,可以在一台性能良好的笔记本上运行并在测试中击败GPT-4o
  • matlab while (~feof(fid))语句解释
  • 【C++11】智能指针
  • AMD FSR 4已秘密开发1年 支持AI帧生成
  • opencv之图像梯度
  • Android实现关机和重启功能
  • Linux开发讲课43---/proc/net/dev文件内容详解
  • springboot-创建连接池
  • 【第36章】Spring Cloud之Seata分布式事务
  • GNU力量注入Windows:打造高效跨平台开发新纪元
  • linux上用yolov8训练自己的数据集(pycharm远程连接服务器)
  • C#中的Date Time类
  • java构造器
  • Mysql 面试题总结
  • 51. 数组中的逆序对
  • 使用 Spring Boot + Vue + ElementUI 构建简易评分系统