pcl中窗口点云可视化的几种情况

         pcl中visualization模块中常用于点云可视化的两个class:

1.class pcl::visualization::Cloudviewer(功能简单)
2.class pcl::visualization::PCLVisualizer(成员函数非常多,内容很丰富,为点云可视化中最重要的class)
点云可视化的情况可分为以下情况:
情况1.简单地显示单一点云

代码如下

 pcl::CloudPoint<pcl::PointXYZ>::Ptr cloud(new pcl::CloudPoint<pcl::PointXYZ>);
 pcl::visualization::CloudViewer viewer("simple cloud viewer.");
 viewer.showCloud(cloud);
 while(!viewer.wasStopped())
 {
 }
 

效果图
在这里插入图片描述
情况2.一个视口显示多个点云
代码如下:(我这里是利用parametric model 进行投影,具体参见pcl官网filters模块)

 boost::shared_ptr< pcl::visualization::PCLVisualizer > viewer(new pcl::visualization::PCLVisualizer("project points using  aparameyric model")); 
 viewer->setBackgroundColor(0, 0, 0); //创建窗口 
 int v1; 
 viewer->createViewPort(0.0, 0.0, 1.0, 1.0, v1); 
 //设置点云颜色 
 pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> source_color(cloud, 34, 25, 133); //投影前可以随便设一个颜色
 pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> target_color(cloud_projected, 255, 255, 255);  //投影后的设置为白色
 viewer->addPointCloud<pcl::PointXYZ>(cloud, source_color, "source", v1); 
 viewer->addPointCloud<pcl::PointXYZ>(cloud_projected, target_color, "projected", v1);  
 viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 2, "source"); 
 viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 2, "projected"); 
 viewer->spin();
 

效果图

在这里插入图片描述
情况3:多视口显示

//5双视窗口
 boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer(new pcl::visualization::PCLVisualizer("filter Viewer"));
 viewer->initCameraParameters();
 int v1(0), v2(0);//视口编号在这里设置两个视口
 //5.1原始点云窗口
 viewer->createViewPort(0.0, 0.0, 0.5, 1.0, v1);
 viewer->setBackgroundColor(0, 0, 0, v1);
 viewer->addText("original", 10, 10, "v1 text", v1);
 viewer->addPointCloud<pcl::PointXYZ>(cloud, "sample cloud1", v1);
 viewer->addCoordinateSystem(1.0);
 viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 2, "sample cloud1");
 //5.2滤波窗口
 viewer->createViewPort(0.5, 0.0, 1.0, 1.0, v2);
 viewer->setBackgroundColor(0, 0, 0, v2);
 viewer->addText("after filtered", 10, 10, "v2 text", v2);
 viewer->addPointCloud<pcl::PointXYZ>(cloud_filter, "sample cloud2", v2);
 viewer->addCoordinateSystem(1.0);
 viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 2, "sample cloud2");
 while (!viewer->wasStopped())
 {
  viewer->spinOnce(100);  //刷新
  boost::this_thread::sleep(boost::posix_time::microseconds(100000));
 }

效果图
在这里插入图片描述
这里有更详细的介绍https://segmentfault.com/a/1190000006685118

  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
点云可视化窗口的刷新通常需要在界面上触发一个事件或者定时器来进行刷新,具体实现可以参考以下步骤: 1. 在Qt创建一个QVTKWidget控件用于显示点云,或者使用其他的点云可视化库。 2. 将点云数据加载到PointCloud对象,例如: ``` pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>); // 加载点云数据 pcl::io::loadPCDFile("cloud.pcd", *cloud); ``` 3. 将PointCloud对象转换成VTK的PolyData类型,并将其设置到QVTKWidget控件,例如: ``` vtkSmartPointer<vtkPolyData> polydata = vtkSmartPointer<vtkPolyData>::New(); pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> color_handler(cloud, 255, 255, 255); // 设置点云颜色 pcl::visualization::PointCloudGeometryHandlerXYZ<pcl::PointXYZ> geometry_handler(cloud); // 获取点云几何信息 pcl::visualization::PCLVisualizer vis; vis.addPointCloud<pcl::PointXYZ>(cloud, color_handler, geometry_handler); vis.getPickedPoint(); // 鼠标选点 pcl::visualization::PCLVisualizerInteractorStyle style(&vis); vis.registerKeyboardCallback(&keyboardEventOccurred, (void*)(&vis)); pcl::visualization::VTKPCLVisualizer::Ptr pclVis(new pcl::visualization::VTKPCLVisualizer("viewer", false)); pclVis->setBackgroundColor(0, 0, 0); pclVis->addPointCloud<pcl::PointXYZ>(cloud, color_handler, geometry_handler); pclVis->addCoordinateSystem(1.0); pclVis->initCameraParameters(); pclVis->setCameraPosition(0, 0, 0, 0, 0, -1, 0, 1, 0); pclVis->setCameraClipDistances(-5.0, 5.0); pclVis->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 3); pclVis->registerKeyboardCallback(&keyboardEventOccurred, (void*)(&vis)); ui->qvtkWidget->SetRenderWindow(pclVis->getRenderWindow()); ``` 4. 在界面上添加一个按钮或者定时器,当触发事件时,重新加载点云数据并更新控件,例如: ``` void MainWindow::on_refreshButton_clicked() { pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>); // 加载点云数据 pcl::io::loadPCDFile("cloud.pcd", *cloud); // 将PointCloud对象转换成VTK的PolyData类型,并将其设置到QVTKWidget控件 vtkSmartPointer<vtkPolyData> polydata = vtkSmartPointer<vtkPolyData>::New(); pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> color_handler(cloud, 255, 255, 255); pcl::visualization::PointCloudGeometryHandlerXYZ<pcl::PointXYZ> geometry_handler(cloud); pcl::visualization::PCLVisualizer vis; vis.addPointCloud<pcl::PointXYZ>(cloud, color_handler, geometry_handler); vis.getPickedPoint(); pcl::visualization::PCLVisualizerInteractorStyle style(&vis); vis.registerKeyboardCallback(&keyboardEventOccurred, (void*)(&vis)); pcl::visualization::VTKPCLVisualizer::Ptr pclVis(new pcl::visualization::VTKPCLVisualizer("viewer", false)); pclVis->setBackgroundColor(0, 0, 0); pclVis->addPointCloud<pcl::PointXYZ>(cloud, color_handler, geometry_handler); pclVis->addCoordinateSystem(1.0); pclVis->initCameraParameters(); pclVis->setCameraPosition(0, 0, 0, 0, 0, -1, 0, 1, 0); pclVis->setCameraClipDistances(-5.0, 5.0); pclVis->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 3); pclVis->registerKeyboardCallback(&keyboardEventOccurred, (void*)(&vis)); ui->qvtkWidget->SetRenderWindow(pclVis->getRenderWindow()); } void MainWindow::on_refreshTimer_timeout() { // 每隔一段时间重新加载点云数据并更新控件 on_refreshButton_clicked(); } ``` 以上就是基于Qt的点云可视化窗口刷新的具体实现方法。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值