#include iostream#include pclpoint_typesh#include pclioply_ioh#include pclvisualizationpcl_visualizerhtypedef pclPointXYZ PointT;int main 读取PLY文件 pclPointCloudPointTPtr cloudnew pclPointCloudPointT;
在PCL 1.8.1版本中,PointXYZ类不具有label成员。您可以通过将label作为另一个字段添加到PointXYZ类来解决此问题。以下是修改后的代码示例:
#include <iostream>
#include <pcl/point_types.h>
#include <pcl/io/ply_io.h>
#include <pcl/visualization/pcl_visualizer.h>
typedef pcl::PointXYZ PointT;
struct PointXYZLabeled : public pcl::PointXYZ
{
char label;
};
int main()
{
// 读取PLY文件
pcl::PointCloud<PointXYZLabeled>::Ptr cloud(new pcl::PointCloud<PointXYZLabeled>);
pcl::io::loadPLYFile("D:\\DIANYUNWENJIANJIA\\kruskal_ply.ply", *cloud);
// 寻找骨架中y值最大的连接节点
PointXYZLabeled maxPoint;
float maxY = -std::numeric_limits<float>::infinity();
for (const auto& point : cloud->points) {
if (point.y > maxY) {
maxY = point.y;
maxPoint = point;
}
}
// 标记最大节点为W
maxPoint.label = 'W';
// 可视化
pcl::visualization::PCLVisualizer viewer("PCL Viewer");
viewer.setBackgroundColor(0, 0, 0);
viewer.addPointCloud(cloud, "cloud");
viewer.setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_COLOR, 1, 1, 1, "cloud");
viewer.addText3D("W", maxPoint, 0.1, 1, 1, 1, "label");
viewer.spin();
// 输出PLY文件
pcl::io::savePLYFile("D:\\DIANYUNWENJIANJIA\\Wdianbiaoji_ply.ply", *cloud);
return 0;
}
在这个修改后的代码中,我们创建了一个新的PointCloud类型PointCloudXYZLabeled,它是PointXYZ类的子类,并添加了一个label字段。然后,我们使用PointCloudXYZLabeled类型的指针来加载和保存PLY文件,并在代码中的其他地方使用它。
请注意,如果PLY文件的点云数据具有颜色、法线等其他属性,您还需要相应地修改PointCloudXYZLabeled结构体
原文地址: http://www.cveoy.top/t/topic/hSyA 著作权归作者所有。请勿转载和采集!