2012-08-12 19 views
2

我有這個TOF傳感器,我想將傳感器的數據可視化爲Qt中的一個點雲。我將數據轉換爲pcl::PointCloud,現在我想將其可視化。如何可視化PCL(包含Qt)中的TOF傳感器數據序列?

傳感器的API會在創建時發出圖片。我會把它發送到QVTKWidget來想象它。而我在這個片段中的代碼(這是我從here GOT)試了一下:

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

但似乎這只是爲了形象化一個穩定點雲,而不是點的變化序列 -clouds。

問題:只要我的傳感器發出新圖片,是否有任何方式更新cloud_xyz

回答

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