在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结构体

#include iostream#include pclpoint_typesh#include pclioply_ioh#include pclvisualizationpcl_visualizerhtypedef pclPointXYZ PointT;int main	 读取PLY文件	pclPointCloudPointTPtr cloudnew pclPointCloudPointT;

原文地址: http://www.cveoy.top/t/topic/hSyA 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录