这个程序是将点云投影到一个参数模型上例如球形 或者是平面上假如是平面的话通过给定coefficients就可以了代码具体如下#include iostream #include pcl/io/pcd_io.h #include pcl/point_types.h #include pcl/ModelCoefficients.h #include pcl/filters/project_inliers.h #include pcl/filters/extract_indices.h int main(int argc, char **argv) { std::cout Hello, world! std::endl; pcl::PointCloudpcl::PointXYZ::Ptr cloud (new pcl::PointCloudpcl::PointXYZ); pcl::PointCloudpcl::PointXYZ::Ptr cloud_projected (new pcl::PointCloudpcl::PointXYZ); cloud-width 500; 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 1024 * rand() / (RAND_MAX 1.0f); } std::cerr cloud before projection: 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].y \n; } //create a set of planar coefficients with XY0, Z 1 pcl::ModelCoefficients::Ptr coefficients (new pcl::ModelCoefficients ()); coefficients-values.resize (4); coefficients-values[0] coefficients-values[1] 0; coefficients-values[2] 1.0; coefficients-values[3] 0; //create the filtering object pcl::ProjectInlierspcl::PointXYZ proj; proj.setModelType(pcl::SACMODEL_PLANE); proj.setInputCloud(cloud); proj.setModelCoefficients(coefficients); proj.filter(*cloud_projected); std::cerr cloud after projection: std::endl; for (size_t i 0; i cloud_projected-points.size(); i) { std::cerr cloud_projected-points[i].x cloud_projected-points[i].y cloud_projected-points[i].z std::endl;; } pcl::PCDWriter writer; writer.write(original_points.pcd, *cloud, false); writer.write(project_inliers.pcd, *cloud_projected, false); return 0; }最后的结果图