pcl三角面片拼接和PCL库的bug修复

发布时间:2023年12月21日

PCL面片拼接代码如下,我使用的1.10.1PCL,这个版本的库存在问题会导致输出的结果错误,在cc会报错: An error occurred while loading ‘combined mesh’

    // 读取第一个PLY文件
    pcl::PolygonMesh mesh1;
    pcl::io::loadPLYFile("hole.ply", mesh1);

    // 读取第二个PLY文件
    pcl::PolygonMesh mesh2;
    pcl::io::loadPLYFile("no_hole.ply", mesh2);

        // 创建一个新的PolygonMesh
    pcl::PolygonMesh combinedMesh;
    pcl::PolygonMesh::concatenate(mesh1, mesh2, combinedMesh);


    // 将结果保存为PLY文件
    pcl::io::savePLYFile("combined_mesh.ply", combinedMesh);

在PolygonMesh.h中原始函数定义如下,其中计算point_offset 调用过晚,只需要把它剪切到
bool success = pcl::PCLPointCloud2::concatenate(mesh1.cloud, mesh2.cloud);之前即可

      bool success = pcl::PCLPointCloud2::concatenate(mesh1.cloud, mesh2.cloud);
      if (success == false) {
        return false;
      }
      // Make the resultant polygon mesh take the newest stamp
      mesh1.header.stamp = std::max(mesh1.header.stamp, mesh2.header.stamp);

      const auto point_offset = mesh1.cloud.width * mesh1.cloud.height;
      std::transform(mesh2.polygons.begin (),
                     mesh2.polygons.end (),
                     std::back_inserter (mesh1.polygons),
                     [point_offset](auto polygon)
                     {
                        std::transform(polygon.vertices.begin (),
                                       polygon.vertices.end (),
                                       polygon.vertices.begin (),
                                       [point_offset](auto& point_idx)
                                       {
                                         return point_idx + point_offset;
                                       });
                        return polygon;
                      });

      return true;
文章来源:https://blog.csdn.net/qq_39494059/article/details/135129414
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。