我有一个标记点 Cloud 数据( Cloud ),它的点包括“x”,“y”,“z”和“标签”信息,而标签可以是1,2或3 .
pcl::PointCloud<pcl::PointXYZL>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZL>);
现在,我想根据他们的标签将这个点 Cloud 划分为3个单独的点 Cloud . 例如,我想生成一个点 Cloud ,它只包含那些标签为1 (cloud1)
的点的x,y,z信息 . 我这样做了:
int ll=0;
pcl::PointCloud<pcl::PointXYZL>::Ptr cloud1 (new pcl::PointCloud<pcl::PointXYZL>);
for (int ii = 0; ii < cloud->points.size (); ++ii){
if(cloud->points[ii].label==1)
{
cloud1->points[ll].x=cloud->points[ii].x;
cloud1->points[ll].y=cloud->points[ii].y;
cloud1->points[ll].z=cloud->points[ii].z;
ll++;
}
}
for (int ii = 0; ii < cloud->points.size (); ++ii){
{
cloud1->points[ll].x=cloud->points[ii].x;
cloud1->points[ll].y=cloud->points[ii].y;
cloud1->points[ll].z=cloud->points[ii].z;
ll++;
}
}
但我收到 "Segmentation fault (core dumped)"
错误 . 我想知道问题出在哪里?
3 回答
您正在索引
cloud1
存储向量,因为ll
超出范围,因此它不会发生错误,这就是它出错的原因 . 您需要使用push_back
附加一个新点 .尝试在提供数据之前设置输出 Cloud 大小:
什么acraig5075说 . 但是,如果原始 Cloud 没有任何带有一个或多个标签的点,并且可能导致程序在运行时崩溃,则可能会出现空 Cloud .