我的设想是先提取平面,平面有边,从边中提取直线。。。。。到提取直线的时候就报错了。。。求助!!!!!!!!!!!!!!!!
// Create the segmentation object for the planar model and set all the parameters
seg.setOptimizeCoefficients (true); //选择模型系数是否需要优化
seg.setModelType (pcl::SACMODEL_NORMAL_PLANE); //平面模型
seg.setNormalDistanceWeight (0.1); //设置表面法线权重系数
seg.setMethodType (pcl::SAC_RANSAC); //分割方法
seg.setMaxIterations (100); //迭代次数
seg.setDistanceThreshold (0.1); //距离阈值,离散点到模型的距离
seg.setInputCloud(cloud_filtered);
//seg.setInputCloud (cloud);
seg.setInputNormals (cloud_normals);
// Obtain the plane inliers and coefficients
seg.segment (*inliers_plane, *coefficients_plane);
std::cerr << "Plane coefficients: " << *coefficients_plane << std::endl;
// Extract the planar inliers from the input cloud
extract.setInputCloud (cloud_filtered);
// extract.setInputCloud(cloud);
extract.setIndices (inliers_plane);
extract.setNegative (false); //
// Write the planar inliers to disk
pcl::PointCloud<PointT>::Ptr cloud_plane (new pcl::PointCloud<PointT> ());
extract.filter (*cloud_plane);
std::cerr << "PointCloud representing the planar component: " << cloud_plane->points.size () << " data points." << std::endl;
writer.write ("tiqubeizi_plane.pcd", *cloud_plane, false);
//创建一个分割直线对象,设置参数
seg.setOptimizeCoefficients(true); //选择模型系数是否需要优化
seg.setModelType(pcl::SACMODEL_LINE);
seg.setNormalDistanceWeight(0.1); //设置表面法线权重系数
seg.setMethodType(pcl::SAC_RANSAC); //分割方法
seg.setMaxIterations(10); //迭代次数
seg.setDistanceThreshold(0.01); //距离阈值,离散点到模型的距离
seg.setInputCloud(cloud_plane);
seg.setInputNormals(cloud_normals);
seg.segment(*inliers_line, *coefficients_line);
std::cerr << "Plane coefficients: " << *coefficients_line << std::endl;
//提取直线内点
extract.setInputCloud(cloud_plane);
extract.setIndices(inliers_line);
extract.setNegative(false);
pcl::PointCloud<PointT>::Ptr cloud_line(new pcl::PointCloud<PointT>());
extract.filter(*cloud_line);
std::cerr << "PointCloud representing the planar component: " << cloud_line->points.size() << " data points." << std::endl;
writer.write("tiqubeizi_line.pcd", *cloud_line, false);