1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
| #include <iostream> #include <pcl/ModelCoefficients.h> //模型系数 #include <pcl/io/pcd_io.h> //输入输出 #include <pcl/point_types.h> //点云(类型) #include <pcl/sample_consensus/method_types.h> //随机样本一致性算法 方法类型 #include <pcl/sample_consensus/model_types.h> //随机样本一致性算法 模型类型 #include <pcl/segmentation/sac_segmentation.h> //随机样本一致性算法 分割方法
int main (int argc, char** argv) { pcl::PointCloud<pcl::PointXYZ> cloud; cloud.width = 15; cloud.height = 1; cloud.points.resize (cloud.width * cloud.height);
for (size_t i = 0; i < cloud.points.size (); ++i) { cloud.points[i].x = 1024 * rand () / (RAND_MAX + 1.0f); cloud.points[i].y = 1024 * rand () / (RAND_MAX + 1.0f); cloud.points[i].z = 1.0; }
cloud.points[0].z = 2.0; cloud.points[3].z = -2.0; cloud.points[6].z = 4.0; std::cerr << "Point cloud data: " << cloud.points.size () <<" points" << std::endl; for (size_t i = 0; i < cloud.points.size (); ++i) std::cerr << " " << cloud.points[i].x << " " << cloud.points[i].y << " " << cloud.points[i].z << std::endl;
pcl::ModelCoefficients::Ptr coefficients (new pcl::ModelCoefficients); pcl::PointIndices::Ptr inliers (new pcl::PointIndices); pcl::SACSegmentation<pcl::PointXYZ> seg; seg.setOptimizeCoefficients (true); seg.setModelType (pcl::SACMODEL_PLANE); seg.setMethodType (pcl::SAC_RANSAC); seg.setDistanceThreshold (0.01); seg.setInputCloud (cloud.makeShared ()); seg.segment (*inliers, *coefficients);
if (inliers->indices.size () == 0) {
PCL_ERROR ("Could not estimate a planar model for the given dataset."); return (-1); } std::cerr << "Model coefficients: " << coefficients->values[0] << " " <<coefficients->values[1] << " " <<coefficients->values[2] << " " <<coefficients->values[3] <<std::endl; std::cerr << "Model inliers: " << inliers->indices.size () << std::endl; for (size_t i = 0; i < inliers->indices.size (); ++i) std::cerr << inliers->indices[i] << " " <<cloud.points[inliers->indices[i]].x << " " <<cloud.points[inliers->indices[i]].y << " " <<cloud.points[inliers->indices[i]].z << std::endl; return (0); }
|