1

我已经从点云中提取了线段,并用于pcl::SACSegmentation<pcl::PointXYZ> seg; 同时拟合所有线。我所有的文件段都存储在同一个文件夹中,我可以一个一个地读取它们并单独计算它们的模型系数。

解决这个问题的最好方法是通过一个for循环,但viewer.addLine在第二次迭代中给出错误,说addLine在绘制一条线后已经使用过(RANSAC)。我使用 PCL 站点http://pointclouds.org/documentation/tutorials/cylinder_segmentation.php中的方法来确定我所有段的系数。根据我目前所了解的,模型系数是在内部存储的。

目标:使用 RANSAC 从模型系数中同时绘制所有线并将它们添加到 PCL 可视化器中。

这是我用来加载所有文件的片段(示例)

std::stringstream ss;
ss << "./cloud_cluster_" << j << ".pcd";
reader.read<pcl::PointXYZ> (ss.str (), *cloud_cluster, false); 
j++;

// snip

pcl::visualizer viewer ("Sample programme")
viewer.addCloud();
viewer.addLine(model_coefficients)

您的帮助将不胜感激。

4

1 回答 1

1

您正在使用的addLine功能记录在此处的 API 中:http: //docs.pointclouds.org/trunk/classpcl_1_1visualization_1_1_p_c_l_visualizer.html#a5fd2b99b85da61df8b58980bdb6b0f41

签名:

bool addLine (const pcl::ModelCoefficients &coefficients, const std::string &id="line", int viewport=0)

在这里你可以看到当你添加一行时,它会自动被赋予一个字符串id“ line”。如果您只添加一行,这很好,但对于多行,您需要为每一行提供一个唯一的 id。

例如

std::stringstream ss;
ss<<"line"<<j;
viewer.addLine(model_coefficients,ss.str());
于 2015-08-13T06:38:56.580 回答