我有一个标记点云数据( cloud ),它的点包括"x“、"y”、"z“和”标签“信息,而标签可以是1、2或3。
pcl::PointCloud<pcl::PointXYZL>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZL>);现在,我想根据他们的标签把这个点云划分成三个独立的点云。例如,我想生成一个点云,它只包含那些标记为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)"错误。我在想问题出在哪里?
发布于 2017-08-21 12:49:50
您正在索引到还没有大小的cloud1存储向量。您不能这样做,因为ll是超出界限的,这就是它分割错误的原因。您需要使用push_back追加一个新的点。
if (cloud->points[ii].label == 1)
{
cloud1->push_back(cloud->points[ii]);
}发布于 2017-08-21 12:41:32
在提供数据之前,尝试设置输出云大小:
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud1 (new pcl::PointCloud<pcl::PointXYZ>);
// Fill in the cloud data
cloud1 ->width = cloud->width;
cloud1 ->height = cloud->height;
cloud1 ->is_dense = false;
cloud1 ->points.resize(cloud->width * cloud->height);
for (size_t i = 0; i < cloud->points.size(); ++i)
{
cloud1 ->points[i].x = cloud->at(i).x;
cloud1 ->points[i].y = cloud->at(i).y;
cloud1 ->points[i].z = cloud->at(i).z;
}发布于 2017-10-18 10:07:46
acraig5075说的话。但是,如果原始云没有带有一个或多个标签的任何点,并且可能导致程序在运行时崩溃,则可能会出现空云。
pcl::PointCloud<pcl::PointXYZL>::Ptr cloud1 (new pcl::PointCloud<pcl::PointXYZL>);
pcl::PointCloud<pcl::PointXYZL>::Ptr cloud2 (new pcl::PointCloud<pcl::PointXYZL>);
pcl::PointCloud<pcl::PointXYZL>::Ptr cloud3 (new pcl::PointCloud<pcl::PointXYZL>);
for( int ii = 0; ii < cloud->size(); ii++){
if(cloud->points[ii].label==1){
cloud1->push_back(cloud->points[ii]);
}
if(cloud->points[ii].label==2){
cloud2->push_back(cloud->points[ii]);
}
if(cloud->points[ii].label==3){
cloud3->push_back(cloud->points[ii]);
}
}
if(cloud1->size() > 0) ...https://stackoverflow.com/questions/45795526
复制相似问题