2013-11-22 71 views
8

我剛開始使用偉大的點雲庫,並希望在一個查看器中顯示兩個點雲,但每個都以不同的顏色顯示。將兩個不同的點雲添加到查看器(點雲庫(PCL))

當我使用一個點雲對象(指針?!)時,它工作得很好,但如果我想添加第二個,只有第二個會在查看器中顯示。

我正在使用pcl版本1.6,並且做得很像這個tutorial
也許你們有一個暗示。

相關的代碼片段如下。提前致謝!!!

boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer_two_clouds (new pcl::visualization::PCLVisualizer("3D Viewer")); 
    viewer_two_clouds->setBackgroundColor(0,0,0); 

    // cloud: green/cloud2: red 
    pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZRGB> single_color1 (cloud, 0, 255, 0); 
    pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZRGB> single_color2 (cloud2, 255, 0, 0); 

    //add both 
    viewer_two_clouds->addPointCloud<pcl::PointXYZRGB> (cloud, single_color1, "sample_cloud_1"); 
    viewer_two_clouds->addPointCloud<pcl::PointXYZRGB> (cloud2, single_color2, "sample_cloud_2"); 

    // set coordinateSystem and init camera 
    viewer_two_clouds->addCoordinateSystem(1.0); 
    viewer_two_clouds->initCameraParameters(); 

    while(!viewer_two_clouds->wasStopped()) 
    { 
     viewer_two_clouds->spinOnce(); 
     boost::this_thread::sleep (boost::posix_time::microseconds(100000)); 
    } 

    viewer_two_clouds->close(); 
+0

您是否檢查過沒有加載相同的'PCD'? –

+0

我實際上只加載一個pcd,但是我將它複製並將它從其他點雲移動10米。 copyPointCloud(* cloud,* cloud2); /複製後我做cloud2-> sensor_origin_ = p; – GeoGecco

+0

好的。然後,嘗試加載文件兩次,而不是複製。我不認爲這會解決它,但以防萬一...... –

回答

5

爲了應用變換(如旋轉和平移)你已經加載,你應該使用pcl::transformPointCloud功能(see here)的點雲。該函數需要3個參數:輸入雲,輸出雲和Eigen::Transform。簡單地定義翻譯轉換並將其提供給函數以正確翻譯您的雲。

有一個很好的Eigen教程(here),向您展示如何定義和使用空間變換。

3

德克斯特幫了我很多=)

這裏是我用來轉換點雲,以便其他人可以使用它作爲好!

void trans(); 
    { 
     Eigen::Affine3f t; 

     pcl::getTransformation(10.0,5.0,20.0,0.0,0.0,0.0,t); 
     pcl::transformPointCloud(*cloud, *cloud2, t); 
    } 
3

還有其他的方法來一個內顯示兩個點雲viewer.you可以在窗口中創建兩個differet視口,有些人認爲這樣的:

viewer_two_clouds->createViewPort (0.0,0.0,0.5,1.0,0); 
viewer_two_clouds->setBackgroundColor(0,0,0,0); // background color dark 
viewer_two_clouds->addText("sample_cloud_1", 10, 10, "right", 0); 
viewer_two_clouds->addPointCloud(cloud, "sample_cloud_1", 0); 

viewer_two_clouds->createViewPort (0.5,0.0,0.1,1.0,0); 
viewer_two_clouds->setBackgroundColor(0.1,0.1,0.1,0); // background color light 
viewer_two_clouds->addText("sample_cloud_2", 10, 10, "left", 0); 
viewer_two_clouds->addPointCloud(cloud2, "sample_cloud_2", 0); 

這種方式,你可以看到兩個點除了彼此之外的雲(並且不重疊)。