这段代码中有一个错误,即在循环中没有为每个聚类创建一个新的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文件,并在可视化时显示每个聚类的点云数据

检查错误pclvisualizationPCLVisualizer viewer1Point Cloud Voiewer;	boostshared_ptrpclPointCloudpclPointXYZRGB cloudPtrnew pclPointCloudpclPointXYZRGB;	for int i = 0; i newIndicesVectorsize; ++i			for cons

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

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