Advertisement

PCL :实现框选点云并保存(附完整源码)

阅读量:

该博文介绍了如何使用PCL(Point Cloud Library)库实现对三维点云数据的框选操作及保存功能。具体步骤包括:通过C++代码创建一个PCL可视化对象,在可视化窗口中用鼠标对目标区域进行框选,并将选中的点云数据保存为PCD格式文件(selected_cloud.pcd)。该教程为开发者提供了基于实时三维数据处理的具体实现方法,并附上了完整代码示例及运行说明[1]。
[1] 博文链接:

PCL :实现框选点云并保存

以下是一个使用PCL库实现框选点云并保存的示例代码:

复制代码
    cpp
    #include <iostream>
    #include <pcl/io/pcd_io.h>
    #include <pcl/point_types.h>
    #include <pcl/visualization/pcl_visualizer.h>
    
    pcl::PointCloud<pcl::PointXYZ>::Ptr selected_cloud(new pcl::PointCloud<pcl::PointXYZ>);
    
    void boxSelectionCallback(const pcl::visualization::AreaPickingEvent& event, void* viewer_void)
    {
      if (event.getPointsIndices(selected_cloud->indices)) {
    std::cout << "Selected " << selected_cloud->indices.size() << " points." << std::endl;
      }
    }
    
    int main(int argc, char** argv)
    {
      // 创建可视化对象
      pcl::visualization::PCLVisualizer viewer("Box Selection");
      
      // 生成一个随机点云用于显示
      pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
      cloud->width = 100;
      cloud->height = 1;
      cloud->points.resize(cloud->width * cloud->height);
      for (size_t i = 0; i < cloud->points.size(); ++i) {
    cloud->points[i].x = 1024 * rand() / (RAND_MAX + 1.0f);
    cloud->points[i].y = 1024 * rand() / (RAND_MAX + 1.0f);
    cloud->points[i].z = 1024 * rand() / (RAND_MAX + 1.0f);
      }
    
      // 添加点云到可视化对象中
      viewer.addPointCloud<pcl::PointXYZ>(cloud, "cloud");
      
      // 注册框选回调函数
      viewer.registerAreaPickingCallback(boxSelectionCallback, static_cast<void*>(&viewer));
    
      // 主循环
      while (!viewer.wasStopped()) {
    viewer.spinOnce();
    
    // 如果有选中的点云,则保存选中区域的点云到文件
    if (!selected_cloud->empty()) {
      pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_selected(new pcl::PointCloud<pcl::PointXYZ>);
      pcl::ExtractIndices<pcl::PointXYZ> extract;
      extract.setInputCloud(cloud);
      extract.setIndices(selected_cloud);
      extract.filter(*cloud_selected);
      
      pcl::io::savePCDFileASCII("selected_cloud.pcd", *cloud_selected);
      std::cout << "Selected cloud saved to selected_cloud.pcd" << std::endl;
      
      selected_cloud->clear();
    }
      }
    
      return 0;
    }
    
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
    AI助手

该代码通过生成一个PCL可视化的对象来实现数据展示功能,并输出了一个随机点云作为分析基础。
在数据展示界面中使用鼠标框选点云是一种交互式操作方式,在完成选择后即可将提取的点集保存至指定文件(selected_cloud.pcd)。
本文系博主原创文章, 版权所有, 未经允许严禁任何形式的转载或引用。
本文博客发布地址为:

全部评论 (0)

还没有任何评论哟~