我尝试从
pcl::PointCloud<pcl::PointXYZ>
转换为 pcl::PCLPointCloud2
但转换返回一个空的点云。
这是我的代码:
pcl::PCLPointCloud2 cloud_inliers_pcl2;
pcl::toPCLPointCloud2(cloud_inliers, cloud_inliers_pcl2);
我可以打印出云“cloud_inliers”,它位于
pcl::PointCloud<pcl::PointXYZ>
但是
pcl::PCLPointCloud2
返回空字段
这有点晚了,但搜索同一主题的其他人可能会发现这很有用。
要在 PCLPointCloud2 和 PointT 类型之间进行转换,您可以使用:
//从PCLPointCloud2转换为PointT pcl::fromPCLPointCloud2(*pc2_cloud_ptr, *xyzrgb_cloud_ptr);
和
///从PointT转换为PCLPointCloud2 pcl::toPCLPointCloud2(*xyzrgb_cloud_ptr, *pc2_cloud_ptr);
我指向点云的指针定义为:
pcl::PCLPointCloud2::Ptr pc2_cloud_ptr(新 pcl::PCLPointCloud2);
和
pcl::PointCloudpcl::PointXYZRGB::Ptr xyzrgb_cloud_ptr(新 pcl::PointCloudpcl::PointXYZRGB);
请记住包括:
#包括
但请注意,如果您使用点云库 (PCL) 而不是机器人操作系统 (ROS) 库,则无需转换而只需使用 PointT 类型(例如 pcl::PointCloudpcl::PointXYZRGB::指针)。 PCL 教程中的一些示例使用 PCLPointCloud2 类型,但我发现 PointT 类型也可以正常工作,无需在类型之间进行转换。我猜这些教程适用于旧版本的 PCL。下采样教程就是一个很好的例子:https://pcl.readthedocs.io/projects/tutorials/en/latest/voxel_grid.html 我使用了 PointT 类型而不是教程中使用的 PCLPointCloud2 类型,它在 PCL 1.11 中运行良好。
注意:我最近开始学习使用点云库来完成我的硕士论文。很高兴了解有关 PCL 中数据结构之间转换的更多信息。文档似乎不够充分,需要反复试验才能理解数据结构。