用VTK 显示 pcl::PointCloud<pcl::PointXYZ>::Ptr 类型点云
时间: 2023-07-02 21:09:40 浏览: 360
VTK点云显示
5星 · 资源好评率100%
要使用 VTK 显示 PCL 的点云,需要将 PCL 的点云数据转换为 VTK 的数据类型。可以使用 `pcl::visualization::PCLVisualizer` 类来实现这个功能。以下是一个简单的示例程序,展示如何使用 VTK 来显示 PCL 点云数据:
```cpp
#include <pcl/point_types.h>
#include <pcl/visualization/pcl_visualizer.h>
#include <vtkRenderWindow.h>
int main ()
{
// 创建一个 PCL 的点云
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
cloud->width = 5;
cloud->height = 1;
cloud->is_dense = false;
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);
}
// 创建一个可视化窗口
pcl::visualization::PCLVisualizer viewer("Cloud Viewer");
// 将 PCL 的点云数据转换为 VTK 的数据类型
vtkSmartPointer<vtkPoints> vtk_points = vtkSmartPointer<vtkPoints>::New();
for (size_t i = 0; i < cloud->points.size(); ++i)
{
vtk_points->InsertNextPoint(cloud->points[i].x, cloud->points[i].y, cloud->points[i].z);
}
vtkSmartPointer<vtkPolyData> vtk_polydata = vtkSmartPointer<vtkPolyData>::New();
vtk_polydata->SetPoints(vtk_points);
// 将 VTK 的数据类型添加到可视化窗口中
viewer.addModelFromPolyData(vtk_polydata, "cloud");
// 显示可视化窗口
while (!viewer.wasStopped())
{
viewer.spinOnce();
}
return 0;
}
```
在上面的示例程序中,我们首先创建了一个 PCL 的点云数据,并使用 `pcl::visualization::PCLVisualizer` 类创建了一个 VTK 的可视化窗口。然后,我们将 PCL 的点云数据转换为 VTK 的数据类型,并将其添加到可视化窗口中。最后,我们进入了一个循环,显示可视化窗口,直到用户关闭窗口。
阅读全文