pcl c++ removePointcloud指定id点云失败
时间: 2023-07-04 14:15:03 浏览: 222
(C++)把bag包里 pointcloud 格式的点云转换为 pointcloud2 格式,并发布出来
pcl::ExtractIndices 类中的方法 removeIndices() 可以用于从点云中删除指定的点。如果你想要从点云中删除指定 id 的点,可以先创建一个包含要删除点的索引的 pcl::PointIndices 对象,然后将其传递给 removeIndices() 方法。例如:
```c++
// 创建一个包含要删除点的索引的 PointIndices 对象
pcl::PointIndices::Ptr indices(new pcl::PointIndices);
indices->indices.push_back(0); // 假设要删除第一个点
// 创建 ExtractIndices 对象
pcl::ExtractIndices<pcl::PointXYZ> extract;
// 设置输入点云和要删除的索引
extract.setInputCloud(cloud);
extract.setIndices(indices);
// 执行 removeIndices() 方法,删除指定点
pcl::PointCloud<pcl::PointXYZ>::Ptr outputCloud(new pcl::PointCloud<pcl::PointXYZ>);
extract.setNegative(true); // 设置为删除模式
extract.filter(*outputCloud); // 执行 removeIndices() 方法
// outputCloud 中包含了删除指定点后的点云数据
```
在此示例中,首先创建了一个包含要删除点的索引的 pcl::PointIndices 对象 indices。然后创建了一个 pcl::ExtractIndices<pcl::PointXYZ> 对象 extract,并将输入点云和要删除的索引设置为其输入。接下来,将 extract 设置为删除模式,并调用 filter() 方法执行 removeIndices() 操作。最后,outputCloud 中包含了删除指定点后的点云数据,可以将其用于后续操作。
需要注意的是,如果要删除的点在输入点云中是唯一的,则可以直接调用 pcl::PointCloud::erase() 方法删除该点,而不需要使用 pcl::ExtractIndices。例如:
```c++
cloud->erase(cloud->begin() + index); // index 是要删除点在点云中的索引
```
在此示例中,cloud 是输入点云的指针,index 是要删除点在点云中的索引。可以直接调用 erase() 方法删除该点,然后可以继续对点云进行操作。
阅读全文