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

在第二种情况下,我完全像使用网格编辑器一样可视化模型,但在第一种情况下,我可视化它的变形版本,即球体就像椭圆体。这里发生了什么?也许我应该手动采样网格?

如果我在查看器中添加两个模型,差异非常明显,点云比网格小,并且发生了一些奇怪的变形(请看附图)

非常感谢你

层
(来源:pcl-users.org

4

2 回答 2

5

如果有人感兴趣,下面是答案:

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

此代码打开一个 PLY 文件并将其转换为具有正确形状的点云。

于 2013-07-08T13:54:04.177 回答
1

我很确定这是 1.7.2 之前的 PCL 的错误,正如发行说明中所否认的那样,并由我自己的经验证明:

修复了 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();
于 2014-11-14T13:40:46.713 回答