我是PCL的新手。我正在使用PCL库,并且正在寻找一种从点云中提取点或将特定点复制到新点云的方法。我想对每个点进行验证,以确定它是否符合条件,并且我想获得仅包含好点的点云。谢谢!
我是PCL的新手。我正在使用PCL库,并且正在寻找一种从点云中提取点或将特定点复制到新点云的方法。我想对每个点进行验证,以确定它是否符合条件,并且我想获得仅包含好点的点云。谢谢!
使用ExtractIndices类:
示例:
pcl::PointCloud<pcl::PointXYZ>::Ptr p_obstacles(new pcl::PointCloud<pcl::PointXYZ>);
pcl::PointIndices::Ptr inliers(new pcl::PointIndices());
pcl::ExtractIndices<pcl::PointXYZ> extract;
for (int i = 0; i < (*p_obstacles).size(); i++)
{
pcl::PointXYZ pt(p_obstacles->points[i].x, p_obstacles->points[i].y, p_obstacles->points[i].z);
float zAvg = 0.5f;
if (abs(pt.z - zAvg) < THRESHOLD) // e.g. remove all pts below zAvg
{
inliers->indices.push_back(i);
}
}
extract.setInputCloud(p_obstacles);
extract.setIndices(inliers);
extract.setNegative(true);
extract.filter(*p_obstacles);
只需使用PCL迭代器进行逐点操作,假设您想要在云中相对于z值进行操作,则可以执行以下操作;
for (pcl::PointCloud<pcl::PointXYZRGB>::iterator it = cloud_filtered->begin(); it != cloud_filtered->end(); it++) {
if (it->z > 3.0) {
cloud_filtered->erase(it);
}
}
http://pointclouds.org/documentation/tutorials/
我认为你所需要的内容在这篇教程中有所涉及:http://pointclouds.org/documentation/tutorials/remove_outliers.php#remove-outliers
尝试在您的计算机上复制示例,然后修改以适应您的需求。