PCL中outofcore模块---基于核外八叉树的大规模点云的显示

81 篇文章 581 订阅 ¥9.90 ¥99.00

写在前面

最近公众号的活动让更多的人加入交流群,尝试提问更多的我问题,群主也在积极的招募更多的小伙伴与我一起分享,能够相互促进。

这里总结群友经常问,经常提的两个问题,并给出我的回答:

(1)啥时候能出教程,能够讲解PCL中的各种功能?

(2)如何解决大规模点云的问题呢?

 

以下给出正式的解答以及计划安排

问题1:对于出PCL的教程,其实网上资料已经有很多,但是没有十分系统的资料,对于该问题,我也在想该如何去做,本人将会在后期的计划中慢慢推出系统的学习教程,实现理论与代码并行的PCL教程,并且正在与深度相机生产商商谈合作,出教程售卖深度相机一并推出。(整个过程由于时间有限,努力筹划中)。那么有想参与进来的可以与群主私聊,参与资料整理,ppt制作等。

问题2:大规模点云的问题,这个问题我已经和无数的人说过查看PCL库中outofcore模块,该模块就是为了实现大规模点云的载入与显示,渲染等问题,但是总是有很多人在问,没人去研究查看,更没有人愿意分享,太多人更愿意做一个伸手就能得到事情。这里我也查阅了很多资料,百度上确实没有很多的资料,但是还是能够解释一些基本的概念问题。这里将出一个全网唯一的关于使用点云实现大规模点云的载入与显示的教程,请各位在转载的的时候注明出处。(因为网上有太多未经过允许转载being_young

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论
这里提供一个基于PCL OutOfCore模块的示例代码,用于加载和显示大规模点数据: ```cpp #include <pcl/io/pcd_io.h> #include <pcl/visualization/pcl_visualizer.h> #include <pcl/outofcore/outofcore.h> #include <pcl/console/time.h> int main(int argc, char** argv) { // 创建一个 OutOfCoreOctree 对象 pcl::outofcore::OutofcoreOctreeBase<pcl::PointXYZ> octree("pointcloud.octree"); // 从 PCD 文件加载点数据 pcl::console::TicToc tt; tt.tic(); pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>); pcl::io::loadPCDFile<pcl::PointXYZ>("pointcloud.pcd", *cloud); std::cout << "Loaded " << cloud->size() << " points in " << tt.toc() << " ms" << std::endl; // 将点数据添加到 OutOfCoreOctree tt.tic(); octree.convertPointCloud(cloud); std::cout << "Converted " << cloud->size() << " points to octree in " << tt.toc() << " ms" << std::endl; // 创建可视化窗口并显示 OutOfCoreOctree 的点数据 pcl::visualization::PCLVisualizer viewer("PointCloud Viewer"); viewer.addCoordinateSystem(); viewer.setBackgroundColor(0.0, 0.0, 0.0); viewer.initCameraParameters(); // 遍历 OutOfCoreOctree 的所有块,并将其的点数据显示出来 std::vector<pcl::outofcore::OutofcoreOctreeBase<pcl::PointXYZ>::OctreeDiskContainer::Ptr> leafs; octree.getLeafContainers(leafs); for (std::vector<pcl::outofcore::OutofcoreOctreeBase<pcl::PointXYZ>::OctreeDiskContainer::Ptr>::iterator it = leafs.begin(); it != leafs.end(); ++it) { pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>); (*it)->loadPointCloud<pcl::PointXYZ>(cloud); pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> handler(cloud, rand() % 256, rand() % 256, rand() % 256); viewer.addPointCloud<pcl::PointXYZ>(cloud, handler); } // 进入可视化循环 viewer.spin(); return 0; } ``` 在这个示例代码,我们首先创建了一个 OutOfCoreOctreeBase 对象,并将其初始化为一个名为 "pointcloud.octree" 的文件。然后,我们从一个名为 "pointcloud.pcd" 的 PCD 文件加载点数据,并使用 convertPointCloud 函数将其添加到 OutOfCoreOctree 。接着,我们创建了一个可视化窗口,并遍历了 OutOfCoreOctree 的所有块,将其的点数据添加到可视化窗口进行显示。最后,我们进入了可视化循环,等待用户交互操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

点云PCL公众号博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值