#include <pcl/point_types.h> #include <pcl/io/pcd_io.h> #include <pcl/filters/passthrough.h> #include <pcl/filters/voxel_grid.h> #include <pcl/features/normal_3d.h> #include <pcl/kdtree/kdtree_flann.h> #include <pcl/sample_consensus/method_types.h> #include <pcl/sample_consensus/model_types.h> #include <pcl/segmentation/sac_segmentation.h> #include <pcl/surface/concave_hull.h> #include <pcl/surface/mls.h> #include <pcl/visualization/cloud_viewer.h> #include #include

int main () { srand(static_cast(time(0)));

// Generate outer ring point cloud pcl::PointCloudpcl::PointXYZ::Ptr cloud_ring(new pcl::PointCloudpcl::PointXYZ); for (float angle = 0; angle <= 360; angle += 0.1) { pcl::PointXYZ point; point.x = 100cos(angleM_PI/180); point.y = 100sin(angleM_PI/180); point.z = 0; cloud_ring->points.push_back(point); }

// Generate inner ring point cloud pcl::PointCloudpcl::PointXYZ::Ptr cloud_hole(new pcl::PointCloudpcl::PointXYZ); for (float angle = 0; angle <= 360; angle += 0.1) { pcl::PointXYZ point; point.x = 80cos(angleM_PI/180); point.y = 80sin(angleM_PI/180); point.z = 0; cloud_hole->points.push_back(point); }

// Combine point clouds pcl::PointCloudpcl::PointXYZ::Ptr cloud(new pcl::PointCloudpcl::PointXYZ); *cloud = *cloud_ring; *cloud += *cloud_hole;

// Add random noise for (int i = 0; i < cloud->size(); ++i) { float noise_x = static_cast(rand())/RAND_MAX10-5; float noise_y = static_cast(rand())/RAND_MAX10-5; float noise_z = static_cast(rand())/RAND_MAX*10-5; cloud->points[i].x += noise_x; cloud->points[i].y += noise_y; cloud->points[i].z += noise_z; }

// Visualize point cloud pcl::visualization::CloudViewer viewer('PointCloud Viewer'); viewer.showCloud(cloud);

while (!viewer.wasStopped()) { }

return 0; }

该代码首先生成了外半径为 100,内半径为 80 的圆环的点云,然后生成了内部随机点云,最后将两个点云合并并可视化。可以根据需要调整噪声的程度。


原文地址: https://www.cveoy.top/t/topic/nzOK 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录