PCLVisualizer

PCLVisualizer是PCL库中的一个强大可视化工具,能展示法线、绘制形状和多视口。本文通过代码示例介绍了如何使用PCLVisualizer显示单个点云、设置背景颜色、显示轴,以及如何处理RGB点云、自定义颜色、显示法线、绘制形状、使用多个视口和实现交互定制。示例涵盖了从基础到高级的各种功能,帮助理解PCLVisualizer的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

PCLVisualizer是PCL的全功能可视化类。虽然使用比CloudViewer更复杂,但功能也更强大,提供了显示法线,绘图形状和多个视口等功能。

本教程将使用代码示例来说明PCLVisualizer的一些功能,从显示单个点云开始。大部分代码示例都是样板文件,用于设置将被可视化的点云。每个样本的相关代码都包含在特定于该样本的函数中。代码如下所示。将其复制保存到文件名为pcl_visualizer_demo.cpp中。

/* \author Geoffrey Biggs */


#include <iostream>

#include <boost/thread/thread.hpp>
#include <pcl/common/common_headers.h>
#include <pcl/features/normal_3d.h>
#include <pcl/io/pcd_io.h>
#include <pcl/visualization/pcl_visualizer.h>
#include <pcl/console/parse.h>

// --------------
// -----Help-----
// --------------
void
printUsage (const char* progName)
{
  std::cout << "\n\nUsage: "<<progName<<" [options]\n\n"
            << "Options:\n"
            << "-------------------------------------------\n"
            << "-h          this help\n"
            << "-s          Simple visualisation example\n"
            << "-r          RGB colour visualisation example\n"
            << "-c          Custom colour visualisation example\n"
            << "-n          Normals visualisation example\n"
            << "-a          Shapes visualisation example\n"
            << "-v          Viewports example\n"
            << "-i          Interaction Customization example\n"
            << "\n\n";
}


boost::shared_ptr<pcl::visualization::PCLVisualizer> simpleVis (pcl::PointCloud<pcl::PointXYZ>::ConstPtr cloud)
{
  // --------------------------------------------
  // -----Open 3D viewer and add point cloud-----
  // --------------------------------------------
  boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer (new pcl::visualization::PCLVisualizer ("3D Viewer"));
  viewer->setBackgroundColor (0, 0, 0);
  viewer->addPointCloud<pcl::PointXYZ> (cloud, "sample cloud");
  viewer->setPointCloudRenderingProperties (pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, "sample cloud");
  viewer->addCoordinateSystem (1.0);
  viewer->initCameraParameters ();
  return (viewer);
}


boost::shared_ptr<pcl::visualization::PCLVisualizer> rgbVis (pcl::PointCloud<pcl::PointXYZRGB>::ConstPtr cloud)
{
  // --------------------------------------------
  // -----Open 3D viewer and add point cloud-----
  // --------------------------------------------
  boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer (new pcl::visualization::PCLVisualizer ("3D Viewer"));
  viewer->setBackgroundColor (0, 0, 0);
  pcl::visualization::PointCloudColorHandlerRGBField<pcl::PointXYZRGB> rgb(cloud);
  viewer->addPointCloud<pcl::PointXYZRGB> (cloud, rgb, "sample cloud");
  viewer->setPointCloudRenderingProperties (pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 3, "sample cloud");
  viewer->addCoordinateSystem (1.0);
  viewer->initCameraParameters ();
  return (viewer);
}


boost::shared_ptr<pcl::visualization::PCLVisualizer> customColourVis (pcl::PointCloud<pcl::PointXYZ>::ConstPtr cloud)
{
  // --------------------------------------------
  // -----Open 3D viewer and add point cloud-----
  // --------------------------------------------
  boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer (new pcl::visualization::PCLVisualizer ("3D Viewer"));
  viewer->setBackgroundColor (0, 0, 0);
  pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> single_color(cloud, 0, 255, 0);
  viewer->addPointCloud<pcl::PointXYZ> (cloud, single_color, "sample cloud");
  viewer->setPointCloudRenderingProperties (pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 3, "sample cloud");
  viewer->addCoordinateSystem (1.0);
  viewer->initCameraParameters ();
  return (viewer);
}


boost::shared_ptr<pcl::visualization::PCLVisualizer> normalsVis (
    pcl::PointCloud<pcl::PointXYZRGB>::ConstPtr cloud, pcl::PointCloud<pcl::Normal>::ConstPtr normals)
{
  // --------------------------------------------------------
  // -----Open 3D viewer and add point cloud and normals-----
  // --------------------------------------------------------
  boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer (new pcl::visualization::PCLVisualizer ("3D Viewer"));
  viewer->setBackgroundColor (0, 0, 0);
  pcl::visualization::PointCloudColorHandlerRGBField<pcl::PointXYZRGB> rgb(cloud);
  viewer->addPointCloud<pcl::PointXYZRGB> (cloud, rgb, "sample cloud");
  viewer->setPointCloudRenderingProperties (pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 3, "sample cloud");
  viewer->addPointCloudNormals<pcl::PointXYZRGB, pcl::Normal> (cloud, normals, 10, 0.05, "normals");
  viewer->addCoordinateSystem (1.0);
  viewer->initCameraParameters ();
  return (viewer);
}


boost::shared_ptr<pcl::visualization::PCLVisualizer> shapesVis (pcl::PointCloud<pcl::PointXYZRGB>::ConstPtr cloud)
{
  // --------------------------------------------
  // -----Open 3D viewer and add point cloud-----
  // --------------------------------------------
  boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer (new pcl::visualization::PCLVisualizer ("3D Viewer"));
  viewer->setBackgroundColor (0, 0, 0);
  pcl::visualization::PointCloudColorHandlerRGBField<pcl::PointXYZRGB> rgb(cloud);
  viewer->addPointCloud<pcl::PointXYZRGB> (cloud, rgb, "sample cloud");
  viewer->setPointCloudRenderingProperties (pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 3, "sam
PCLVisualizer是PCL库中的一个可视化工具,可以用于可视化点云数据。如果想要在自己的代码中使用PCLVisualizer,可以通过继承PCLVisualizer类来实现,具体步骤如下: 1. 在自己的代码中包含PCLVisualizer的头文件:#include <pcl/visualization/pcl_visualizer.h> 2. 创建一个继承自PCLVisualizer的子类,例如: class MyVisualizer : public pcl::visualization::PCLVisualizer { public: MyVisualizer(const std::string& name = "Visualizer") : pcl::visualization::PCLVisualizer(name) {} ~MyVisualizer() {} }; 3. 在子类中可以添加自己的成员变量和成员函数,并且可以重载PCLVisualizer中的虚函数来实现自己的功能,例如: class MyVisualizer : public pcl::visualization::PCLVisualizer { public: MyVisualizer(const std::string& name = "Visualizer") : pcl::visualization::PCLVisualizer(name) {} ~MyVisualizer() {} void addMyPointCloud(pcl::PointCloud<pcl::PointXYZ>::Ptr cloud) { // 在可视化工具中添加自己的点云数据 this->addPointCloud(cloud); } void spinOnce() { // 重载spinOnce函数,实现自己的功能 // ... // 调用PCLVisualizer的spinOnce函数 pcl::visualization::PCLVisualizer::spinOnce(); } }; 4. 在自己的代码中创建MyVisualizer对象,并使用它来可视化点云数据,例如: int main() { // 创建MyVisualizer对象 MyVisualizer viewer("MyViewer"); // ... // 可视化点云数据 viewer.addMyPointCloud(cloud); // ... // 进行可视化循环 while (!viewer.wasStopped()) { viewer.spinOnce(); } return 0; }
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值