基于C++的Qt和PCL开发的点云显示与交互软件,适合图形图像新人及研究生快速了解点云数据处理及编程开发工作,支持功能包括: 1、颜色渲染 2、法向量等属性计算 3、自动滤波 4、目标剪裁 5、几何量测 6、目标分割 7、点云配准 8、曲面构建 备注:基于cmake编译,支持跨平台,linux和windows下均可运行。 本次服务不包括源码编译,需要自行编译。 Qt5.12.0 PCL 1.11.0 VTK 8.2.0

最近在折腾点云处理工具,顺手用Qt+PCL搭了个能跑的小软件。对刚入门三维视觉的朋友来说,这玩意儿可能比啃论文实在——毕竟直接上手操作才是王道。咱们先看看它能整哪些活:

![点云处理界面示意图]

(假装这里有张软件界面截图)

颜色魔法这块挺有意思,PCL的Visualization模块给了现成的调色板。比如给点云加高程色带:

pcl::visualization::PointCloudColorHandlerGenericField<PointT> color_handler(cloud, "z");
viewer->addPointCloud<PointT>(cloud, color_handler, "sample cloud");

这里的"z"字段直接对应了点云Z坐标值,换个"intensity"就能切到强度着色。Qt的QSlider控件绑个颜色映射范围,实时拖动效果立竿见影。

法向量计算是很多操作的基础,PCL的NormalEstimation类封装得挺利索:

pcl::NormalEstimationOMP<PointT, pcl::Normal> ne;
ne.setNumberOfThreads(4);  // 多线程加速
ne.setInputCloud(cloud);
ne.setSearchMethod(tree);
ne.setRadiusSearch(0.03);  // 搜索半径决定细节程度
ne.compute(*normals);

注意这里的OMP版本比单线程快不止一星半点,特别是在处理百万级点云时。计算完的法向量可以用小线段可视化,配合Qt的复选框控制显示/隐藏。

交互裁剪功能用了PCL的CropBox:

pcl::CropBox<PointT> cropFilter;
cropFilter.setInputCloud(cloud);
cropFilter.setMin(min_pt);
cropFilter.setMax(max_pt);
cropFilter.filter(*cropped_cloud);

配合Qt的OpenGL窗口实现实时框选,这里有个坑——PCL的坐标系和QtOpenGL的坐标系方向需要统一,否则选中的区域会漂移。

软件里最实用的可能是一键滤波,把常用的统计滤波、半径滤波做成组合拳:

// 先去掉离群点
pcl::StatisticalOutlierRemoval<PointT> sor;
sor.setMeanK(50);
sor.setStddevMulThresh(1.0);

// 再降采样
pcl::VoxelGrid<PointT> voxel;
voxel.setLeafSize(0.01f, 0.01f, 0.01f);

这种流水线处理用Qt的QProgressBar显示进度很合适,毕竟点云处理动不动就卡界面。

说到跨平台,CMakeLists里关键配置是这几个:

find_package(Qt5 COMPONENTS Core Widgets OpenGL REQUIRED)
find_package(PCL 1.11 REQUIRED COMPONENTS common io visualization)
target_link_libraries(${PROJECT_NAME} 
    Qt5::Widgets 
    ${PCL_LIBRARIES} 
    vtkRenderingOpenGL2)

Windows下记得把VTK的dll扔对位置,Linux则需要处理OpenGL的依赖问题。实测在Ubuntu 20.04和Win10上都能顺利编译。

对想入门点云处理的同学,建议从这几个方向下手:

  1. 先玩转PCL的IO模块,理解点云数据结构
  2. 用Qt做几个简单的交互控件(旋转/平移/缩放)
  3. 尝试组合不同的算法模块,比如先分割再测量
  4. 学会用CloudCompare比对处理结果

这软件虽然没上复杂算法,但胜在把基础操作串起来了。下次考虑加个点云分类功能,不过那又是另一个深坑了...(笑)

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐