检查错误pclvisualizationPCLVisualizer viewer1Point Cloud Voiewer; boostshared_ptrpclPointCloudpclPointXYZRGB cloudPtrnew pclPointCloudpclPointXYZRGB; for int i = 0; i newIndicesVectorsize; ++i for cons
这段代码中有一个错误,即在循环中没有为每个聚类创建一个新的cloudPtr对象。由于cloudPtr在循环外部定义,每次循环都会将点添加到同一个点云对象中,导致最后可视化时只显示最后一个聚类的点云数据。
为了解决这个问题,可以在循环的每次迭代开始时创建一个新的cloudPtr对象。修改后的代码如下:
pcl::visualization::PCLVisualizer viewer1("Point Cloud Viewer");
for (int i = 0; i < newIndicesVector.size(); ++i)
{
boost::shared_ptr<pcl::PointCloud<pcl::PointXYZRGB>> cloudPtr(new pcl::PointCloud<pcl::PointXYZRGB>());
for (const auto& index1 : newIndicesVector[i].indices)
{
pcl::PointXYZRGB point11;
point11.x = cloud76->points[index1].x;
point11.y = cloud76->points[index1].y;
point11.z = cloud76->points[index1].z;
cloudPtr->points.push_back(point11);
}
std::stringstream ss;
ss << "Euclidean_cluster_" << i + 1 << ".ply";
pcl::io::savePLYFileBinary(ss.str(), *cloudPtr);
uint8_t R = rand() % (256) + 0;
uint8_t G = rand() % (256) + 0;
uint8_t B = rand() % (256) + 0;
string str;
ss >> str;
pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZRGB> color(cloudPtr, R, G, B);
viewer1.addPointCloud<pcl::PointXYZRGB>(cloudPtr, color, str);
viewer1.setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, str);
}
viewer1.spin();
这样修改后,每个聚类的点云数据将被保存为单独的ply文件,并在可视化时显示每个聚类的点云数据
原文地址: http://www.cveoy.top/t/topic/h9Z4 著作权归作者所有。请勿转载和采集!