如何在PCL(Qt)中可视化一系列TOF-Sensor数据?

Fei*_*Fei 2 qt vtk point-cloud-library

我有这个TOF传感器,我想将传感器的数据可视化为Qt中的点云.我将数据转换为a pcl::PointCloud,现在我想要将其可视化.

无论何时创建一个传感器,API都会发出图片.我会把它发送给它QVTKWidget来形象化它.我尝试使用这段代码(我从这里获得):

pcl::visualization::PCLVisualizer pvis ("test_vis", false); 
// 'false' prevents PCLVisualizer's own window to pop up

pvis.addPointCloud<pcl::PointXYZ>(pc); // pc is my point cloud

vtkSmartPointer<vtkRenderWindow> renderWindow = pvis.getRenderWindow();
widget.SetRenderWindow(renderWindow);
Run Code Online (Sandbox Code Playgroud)

但似乎这只是为了可视化一个稳定的点云而不是一个不断变化的点云序列.

问题:cloud_xyz当我的传感器发出新图片时,有没有办法更新?

Fei*_*Fei 12

好的,经过一番尝试,这是我的解决方案:

在我的VTKPointCloudWidget继承自QVTKWidget:

pcl::visualization::PCLVisualizer vis ("vis", false); 

VTKPointCloudWidget::VTKPointCloudWidget(QWidget *parent) : QVTKWidget(parent)
{
   this->resize(500, 500);
   pcl::PointCloud<pcl::PointXYZ>::Ptr pc (new pcl::PointCloud<pcl::PointXYZ>);

   vis.addPointCloud<pcl::PointXYZ>(pc);
   vtkSmartPointer<vtkRenderWindow> renderWindow = vis.getRenderWindow();
   this->SetRenderWindow(renderWindow);
   this->show();
}
Run Code Online (Sandbox Code Playgroud)

每当发射新的传感器图像时,它都会被发送到:

void VTKPointCloudWidget::showPointCloud(SensorPicture pic)
{   
   // converts the sensor image to a point cloud
   pcl::PointCloud<pcl::PointXYZ>::Ptr pc = cvtSP2PC(pic);

   pc->width = pic.width;
   pc->height = pic.height;

   vis.updatePointCloud<pcl::PointXYZ>(pc); 

   this->update();
}
Run Code Online (Sandbox Code Playgroud)