#include \n#include <pcl/io/ply_io.h>\n#include <pcl/point_types.h>\n#include <pcl/ModelCoefficients.h>\n#include <pcl/filters/extract_indices.h>\n#include <pcl/filters/voxel_grid.h>\n#include <pcl/features/normal_3d.h>\n#include <pcl/sample_consensus/method_types.h>\n#include <pcl/sample_consensus/model_types.h>\n#include <pcl/segmentation/sac_segmentation.h>\n#include <pcl/visualization/pcl_visualizer.h>\n\nint main()\n{\n // 读取点云数据\n pcl::PointCloudpcl::PointXYZ::Ptr cloud(new pcl::PointCloudpcl::PointXYZ);\n pcl::PLYReader reader;\n reader.read("D:\DIANYUNWENJIANJIA\newkruskal2_ply.ply", *cloud);\n\n // 创建霍夫变换对象\n pcl::ModelCoefficients::Ptr coefficients(new pcl::ModelCoefficients);\n pcl::PointIndices::Ptr inliers(new pcl::PointIndices);\n pcl::SACSegmentationpcl::PointXYZ seg;\n seg.setOptimizeCoefficients(true);\n seg.setModelType(pcl::SACMODEL_LINE);\n seg.setMethodType(pcl::SAC_RANSAC);\n seg.setMaxIterations(1000);\n seg.setDistanceThreshold(0.04);\n\n // 执行霍夫变换\n seg.setInputCloud(cloud);\n seg.segment(*inliers, *coefficients);\n\n // 提取直线内点\n pcl::ExtractIndicespcl::PointXYZ extract;\n extract.setInputCloud(cloud);\n extract.setIndices(inliers);\n extract.setNegative(false);\n pcl::PointCloudpcl::PointXYZ::Ptr line(new pcl::PointCloudpcl::PointXYZ);\n extract.filter(*line);\n\n // 可视化结果\n pcl::visualization::PCLVisualizer viewer("3D Viewer");\n viewer.setBackgroundColor(0, 0, 0);\n viewer.addPointCloudpcl::PointXYZ(cloud, "cloud");\n viewer.addPointCloudpcl::PointXYZ(line, "line");\n viewer.setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, "cloud");\n viewer.setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_COLOR, 0, 0, 1, "line");\n viewer.addCoordinateSystem(1.0);\n viewer.initCameraParameters();\n viewer.spin();\n\n // 保存结果\n pcl::PLYWriter writer;\n writer.write("D:\DIANYUNWENJIANJIA\拟合中心线_ply.ply", *line);\n\n return 0;\n}


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

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