2013-07-05 74 views
4

我正在使用PCL和網格編輯器(MeshLab)。我有興趣將我的網格物體導入PCL來做一些3D處理。可視化網格與其點雲之間的區別

我有一個網格模型的層格式。當我加載的代碼的模式:

PointCloud<PointXYZRGBA>::Ptr cloud (new PointCloud<PointXYZRGBA>()); 
pcl::io::loadPLYFile<pcl::PointXYZRGBA>(argv[1], *cloud); 

和我想象它作爲一個點雲:

visualization::PCLVisualizer viewer ("Model"); 
viewer.addPointCloud (cloud,"model"); 

幾何形狀是從裝載不同並直接可視化網格:

viewer.addModelFromPLYFile(argv[1], "model"); 

在第二種情況下,我可以像使用Mesh編輯器一樣可視化模型,但在第一種情況下,我可以看到它的變形版本,即球體和橢球體一樣。這裏發生了什麼?也許我應該手動採樣網格?

如果我在瀏覽器中添加了兩種型號,差別非常明顯,點雲比目小,它遭受了一些奇怪的變形(請參見附件圖片)

非常感謝你多

ply http://www.pcl-users.org/file/n4028582/meshply.png

回答

4

如果有人有興趣,這裏的答案:

PointCloud<PointXYZRGBA>::Ptr cloud (new PointCloud<PointXYZRGBA>()); 
pcl::PolygonMesh triangles; 
pcl::io::loadPolygonFilePLY(argv[1], triangles); 
pcl::fromROSMsg(triangles.cloud, *cloud); 

這段代碼打開一個文件PLY並將其轉換爲具有正確形狀的點雲。

1

我敢肯定它的PCL的一個bug 1.7.2之前,作爲放棄發行說明和我自己的經驗證明:

固定在PLYReader一個錯誤,這導致點的變形雲CloudViewer或PCLVisualizer #879

顯示時如果不升級,請加一行修復的bug如下:

if (pcl::io::loadPLYFile <pcl::PointXYZRGBNormal> (file, *cloud) == -1) 
    { 
    std::cout << "Cloud reading failed." << std::endl; 
    return (-1); 
    } 
    cloud->sensor_orientation_.setIdentity();