pcl_viewer 及程序中 改变点云显示的背景

本文详细介绍如何在pcl_viewer中通过命令行参数修改点云显示背景颜色,以及在程序中设置点云背景的方法。提供了具体的命令示例和代码片段,帮助读者掌握点云背景设置技巧。
部署运行你感兴趣的模型镜像

一、使用pcl_viewer查看点云时修改显示背景

首先保存出.pcd文件,然后在用 pcl_viewer 命令查看的时候可以用下面的命令来改变背景颜色

pcl_viewer -bc 255,255,255 pointcloud.pcd

pcl_viewer -bc r,g,b pointcloud.pcd

其中 255,255,255 表示的是白色

二、在程序中设置点云显示背景

//设置点云颜色

pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ>single_color(cloud,0,255,0); //设置背景色 viewer->setBackgroundColor(0,0,0.7)

 

参考的下面两个博客:

https://blog.youkuaiyun.com/weixin_33964094/article/details/94064075

https://blog.youkuaiyun.com/uranus1992/article/details/83574697

您可能感兴趣的与本文相关的镜像

GPT-SoVITS

GPT-SoVITS

AI应用

GPT-SoVITS 是一个开源的文本到语音(TTS)和语音转换模型,它结合了 GPT 的生成能力和 SoVITS 的语音转换技术。该项目以其强大的声音克隆能力而闻名,仅需少量语音样本(如5秒)即可实现高质量的即时语音合成,也可通过更长的音频(如1分钟)进行微调以获得更逼真的效果

在使用 PCL Viewer 的 `use_point_picking` 功能时,如果无法获取点云坐标,可能是由于以下几个原因导致的。以下是一些常见的排查方法和解决方案: ### 1. 确保点云数据正确加载 首先需要确保点云数据被正确加载到 `PCLVisualizer` 中,并且数据格式没有问题。可以尝试打印点云信息来验证是否成功加载。 ```cpp pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>); if (pcl::io::loadPCDFile<pcl::PointXYZ>("your_cloud.pcd", *cloud) == -1) { PCL_ERROR("Couldn't read file your_cloud.pcd \n"); return (-1); } std::cout << "Loaded " << cloud->width * cloud->height << " data points from your_cloud.pcd with the following fields: " << pcl::getFieldsList(*cloud) << std::endl; ``` ### 2. 正确设置回调函数 `use_point_picking` 功能依赖于鼠标点击事件触发回调函数。需要确保你已经正确注册了回调函数,并且该函数能够被调用。可以尝试在回调函数中添加调试输出,以确认其是否被触发。 ```cpp void pointPickingEventOccurred(const pcl::visualization::PointPickingEvent& event, void* viewer_void) { if (event.getPointIndex() == -1) return; float x, y, z; event.getPoint(x, y, z); std::cout << "Selected point coordinates: (" << x << ", " << y << ", " << z << ")" << std::endl; } ``` 注册回调函数的方式如下: ```cpp viewer->registerPointPickingCallback(pointPickingEventOccurred, (void*)viewer.get()); ``` ### 3. 检查渲染窗口是否保持打开状态 确保主程序不会立即退出,否则即使设置了回调函数也无法响应事件。通常可以通过添加一个循环或等待用户关闭窗口的方式来解决这个问题。 ```cpp while (!viewer->wasStopped()) { viewer->spinOnce(100); boost::this_thread::sleep(boost::posix_time::microseconds(100000)); } ``` ### 4. 使用正确的可视化模式 有时点云可能因为缩放、视角或颜色设置不当而难以选择特定点。可以尝试调整相机参数或点云显示方式,以便更容易地进行点选操作。 ```cpp viewer->setCameraPosition(0, 0, 30, 0, 0, 0, 0, 1, 0); // 设置默认相机位置 viewer->addCoordinateSystem(1.0); // 添加坐标系辅助线 ``` ### 5. 验证点云索引有效性 在回调函数中,应该检查返回的点索引是否有效(即不等于 `-1`),否则说明点击位置不在任何点上。 ```cpp int idx = event.getPointIndex(); if (idx != -1) { pcl::PointXYZ selected_point = (*cloud)[idx]; std::cout << "Selected point index: " << idx << ", Coordinates: (" << selected_point.x << ", " << selected_point.y << ", " << selected_point.z << ")" << std::endl; } ``` ### 6. 更新 PCL 库版本 如果你使用的是较旧版本的 PCL,可能存在一些已知的问题或 bug。建议将 PCL 升级到最新稳定版本,以确保所有功能正常运行 [^1]。 ### 7. 调试工具与日志输出 通过在关键步骤添加日志输出,可以帮助定位问题所在。例如,在加载点云后输出点数,在回调函数中输出是否进入函数体等。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值