2

私はこのTOFセンサーを持っており、センサーのデータをQtの点群として視覚化したいです。データをに変換した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);

しかし、これは1つの安定した点群を視覚化することだけを目的としており、点群のシーケンスの変化を視覚化することを目的としていないようです。

質問:cloud_xyzセンサーが新しい画像を出力するたびに更新する方法はありますか?

4

1 に答える 1

12

OK、いくつか試した後、ここに私の解決策があります:

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();
}

新しいセンサー画像が発行されるたびに、次の場所に送信されます。

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();
}
于 2012-08-13T17:59:11.350 に答える