在添加新的代码之前,需要先包含以下头文件:\n\ncpp\n#include <pcl/visualization/point_cloud_color_handlers.h>\n\n\n然后,在KruskalMST函数的最后添加以下代码:\n\ncpp\n// 将与threejiedian相连的边的顶点设置为绿色\npcl::PointCloud<pcl::PointXYZRGB>::Ptr colored_cloud(new pcl::PointCloud<pcl::PointXYZRGB>);\ncolored_cloud->points.resize(cloud->points.size());\nfor (size_t i = 0; i < cloud->points.size(); ++i)\n{\n colored_cloud->points[i].x = cloud->points[i].x;\n colored_cloud->points[i].y = cloud->points[i].y;\n colored_cloud->points[i].z = cloud->points[i].z;\n\n colored_cloud->points[i].r = 255;\n colored_cloud->points[i].g = 0;\n colored_cloud->points[i].b = 0;\n}\n\nfor (const auto& edge : result)\n{\n if (std::find(threejiedian.begin(), threejiedian.end(), edge.src) != threejiedian.end() ||\n std::find(threejiedian.begin(), threejiedian.end(), edge.tgt) != threejiedian.end())\n {\n colored_cloud->points[edge.src].r = 0;\n colored_cloud->points[edge.src].g = 255;\n colored_cloud->points[edge.src].b = 0;\n colored_cloud->points[edge.tgt].r = 0;\n colored_cloud->points[edge.tgt].g = 255;\n colored_cloud->points[edge.tgt].b = 0;\n }\n}\n\n// 找到y值最大的threejiedian节点\nfloat max_y = std::numeric_limits<float>::min();\nint max_y_index = -1;\nfor (const auto& index : threejiedian)\n{\n const auto& point = cloud->points[index];\n if (point.y > max_y)\n {\n max_y = point.y;\n max_y_index = index;\n }\n}\n\n// 将y值最大的threejiedian节点用绿色小球显示\npcl::visualization::PointCloudColorHandlerRGBField<pcl::PointXYZRGB> colored_cloud_color_handler(colored_cloud);\npcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> red_color(cloud, 255, 0, 0);\npcl::visualization::PCLVisualizer viewer("Minimum Spanning Tree");\nviewer.setBackgroundColor(0, 0, 0);\nviewer.addPointCloud<pcl::PointXYZRGB>(colored_cloud, colored_cloud_color_handler, "colored_cloud");\nviewer.addPointCloud<pcl::PointXYZ>(cloud, red_color, "original_cloud");\nviewer.setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 10, "colored_cloud");\nviewer.spin();\n\n// 在y值最大的threejiedian节点上添加一个绿色小球\npcl::ModelCoefficients sphere_coeff;\nsphere_coeff.values.resize(4);\nsphere_coeff.values[0] = cloud->points[max_y_index].x;\nsphere_coeff.values[1] = cloud->points[max_y_index].y;\nsphere_coeff.values[2] = cloud->points[max_y_index].z;\nsphere_coeff.values[3] = 0.01; // 设置球的半径为0.01\nviewer.addSphere(sphere_coeff, "max_y_sphere");\nviewer.spin();\n\n\n这样修改后的代码将使用pcl::PointXYZRGB结构体来存储点云的坐标和颜色信息,并使用pcl::visualization::PointCloudColorHandlerRGBField类来显示点云的颜色。同时,将颜色修改为RGB格式,可以更灵活地设置点的颜色。

PCL 1.8.1 中点云颜色显示问题解决方案 - 解决

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

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