c++ - PCL:使用 RANSAC 访问 pcl::ModelCoefficients::Ptr 的字段以进行线模型近似
问题描述
我正在尝试使用点云库提供的 RANSAC 方法来估计通过点云点的线。我可以创建对象,并毫无问题地估计线模型,如下所示:
pcl::PointCloud<pcl::PointXYZ>::ConstPtr source_cloud(new pcl::PointCloud<pcl::PointXYZ>);
pcl::ModelCoefficients::Ptr line_coefficients(new pcl::ModelCoefficients);
pcl::PointIndices::Ptr inliers (new pcl::PointIndices);
// Populate point cloud...
// Create the segmentation object
pcl::SACSegmentation<pcl::PointXYZ> seg;
seg.setModelType (pcl::SACMODEL_LINE);
seg.setMethodType (pcl::SAC_RANSAC);
seg.setDistanceThreshold (distance_thresh);
seg.setInputCloud (source_cloud);
seg.segment (*inliers, *line_coefficients);
我现在尝试访问模型参数,但我太笨了……根据API,应该有六个可访问的参数:
线的六个系数由线上的一个点和线的方向给出:[point_on_line.x point_on_line.y point_on_line.z line_direction.x line_direction.y line_direction.z]
因此,我试图这样访问它们:
line_coefficients->line_direction->x
但是,这不起作用。我不断收到错误:
“pcl::ModelCoefficients”中没有名为“line_direction”的成员。
我真的不知道我做错了什么......有人有任何想法吗?提前致谢!
解决方案
该文档只是告诉您如何解释这些值。pcl::ModelCoefficients
是一个具有values
类型成员的结构std::vector<float>
。
所以要获得line_direction和point_on_line做:
const auto pt_line_x = line_coefficients->values[0];
const auto pt_line_y = line_coefficients->values[1];
const auto pt_line_z = line_coefficients->values[2];
const auto pt_direction_x = line_coefficients->values[3];
const auto pt_direction_y = line_coefficients->values[4];
const auto pt_direction_z = line_coefficients->values[5];
推荐阅读
- java - 如何将帖子请求从角度应用程序发送到弹簧?
- reactjs - 有人可以解释为什么这个反应组件没有输出图像或正确的关键道具吗?
- database - 使用 Load CSV 时使用 Case 创建节点
- python - 如何定义“operator()”C++类方法的python pybind11绑定?
- spring-boot - 无法将我的 Spring Boot 应用程序部署到 asw beanwalk
- macos - 如何在 MacOS Catalina 上安装 X11 版本的 Emacs?
- css - 引导媒体查询:何时使用最小宽度以及何时使用最大宽度?
- c++ - 解析 lcov total.info
- python - 如何使用 Unix 用下划线符号替换文件名中的特殊字符?
- django-models - 如何创建同一字段的多个条目?