在添加新的代码之前需要先包含以下头文件:cpp#include pclvisualizationpoint_cloud_color_handlersh然后在KruskalMST函数的最后添加以下代码:cpp 将与threejiedian相连的边的顶点设置为绿色pclPointCloudpclPointXYZPtr gr
在pcl1.8.1版本中,pcl::PointXYZ结构体没有r、g和b成员变量,因此无法直接设置点的颜色。可以通过创建一个新的点云对象来存储颜色信息,并将其作为参数传递给pcl::visualization::PointCloudColorHandlerCustom类来显示颜色。
以下是修改后的代码示例:
// 将与threejiedian相连的边的顶点设置为绿色
pcl::PointCloud<pcl::PointXYZRGB>::Ptr colored_cloud(new pcl::PointCloud<pcl::PointXYZRGB>);
colored_cloud->points.resize(cloud->points.size());
for (size_t i = 0; i < cloud->points.size(); ++i)
{
colored_cloud->points[i].x = cloud->points[i].x;
colored_cloud->points[i].y = cloud->points[i].y;
colored_cloud->points[i].z = cloud->points[i].z;
colored_cloud->points[i].r = 255;
colored_cloud->points[i].g = 0;
colored_cloud->points[i].b = 0;
}
for (const auto& edge : result)
{
if (std::find(threejiedian.begin(), threejiedian.end(), edge.src) != threejiedian.end() ||
std::find(threejiedian.begin(), threejiedian.end(), edge.tgt) != threejiedian.end())
{
colored_cloud->points[edge.src].r = 0;
colored_cloud->points[edge.src].g = 255;
colored_cloud->points[edge.src].b = 0;
colored_cloud->points[edge.tgt].r = 0;
colored_cloud->points[edge.tgt].g = 255;
colored_cloud->points[edge.tgt].b = 0;
}
}
// 找到y值最大的threejiedian节点
float max_y = std::numeric_limits<float>::min();
int max_y_index = -1;
for (const auto& index : threejiedian)
{
const auto& point = cloud->points[index];
if (point.y > max_y)
{
max_y = point.y;
max_y_index = index;
}
}
// 将y值最大的threejiedian节点用绿色小球显示
pcl::visualization::PointCloudColorHandlerRGBField<pcl::PointXYZRGB> colored_cloud_color_handler(colored_cloud);
pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> red_color(cloud, 255, 0, 0);
pcl::visualization::PCLVisualizer viewer("Minimum Spanning Tree");
viewer.setBackgroundColor(0, 0, 0);
viewer.addPointCloud<pcl::PointXYZRGB>(colored_cloud, colored_cloud_color_handler, "colored_cloud");
viewer.addPointCloud<pcl::PointXYZ>(cloud, red_color, "original_cloud");
viewer.setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 10, "colored_cloud");
viewer.spin();
// 在y值最大的threejiedian节点上添加一个绿色小球
pcl::ModelCoefficients sphere_coeff;
sphere_coeff.values.resize(4);
sphere_coeff.values[0] = cloud->points[max_y_index].x;
sphere_coeff.values[1] = cloud->points[max_y_index].y;
sphere_coeff.values[2] = cloud->points[max_y_index].z;
sphere_coeff.values[3] = 0.01; // 设置球的半径为0.01
viewer.addSphere(sphere_coeff, "max_y_sphere");
viewer.spin();
这样修改后的代码将使用pcl::PointXYZRGB结构体来存储点云的坐标和颜色信息,并使用pcl::visualization::PointCloudColorHandlerRGBField类来显示点云的颜色。同时,将颜色修改为RGB格式,可以更灵活地设置点的颜色
原文地址: https://www.cveoy.top/t/topic/iaA2 著作权归作者所有。请勿转载和采集!