#include\x20 #include\x20<pcl/io/ply_io.h> #include\x20<pcl/point_types.h> #include\x20<pcl/ModelCoefficients.h> #include\x20<pcl/filters/extract_indices.h> #include\x20<pcl/filters/voxel_grid.h> #include\x20<pcl/features/normal_3d.h> #include\x20<pcl/sample_consensus/method_types.h> #include\x20<pcl/sample_consensus/model_types.h> #include\x20<pcl/segmentation/sac_segmentation.h> #include\x20<pcl/visualization/pcl_visualizer.h>

int\x20main() { \x20\x20//\x20读取点云数据 \x20\x20pcl::PointCloudpcl::PointXYZ::Ptr\x20cloud(new\x20pcl::PointCloudpcl::PointXYZ); \x20\x20pcl::PLYReader\x20reader; \x20\x20reader.read("D:\DIANYUNWENJIANJIA\newkruskal2_ply.ply",\x20*cloud);

\x20\x20//\x20创建霍夫变换对象 \x20\x20pcl::ModelCoefficients::Ptr\x20coefficients(new\x20pcl::ModelCoefficients); \x20\x20pcl::PointIndices::Ptr\x20inliers(new\x20pcl::PointIndices); \x20\x20pcl::SACSegmentationpcl::PointXYZ\x20seg; \x20\x20seg.setOptimizeCoefficients(true); \x20\x20seg.setModelType(pcl::SACMODEL_LINE); \x20\x20seg.setMethodType(pcl::SAC_RANSAC); \x20\x20seg.setMaxIterations(1000); \x20\x20seg.setDistanceThreshold(0.04);

\x20\x20//\x20设置垂直于yz平面的法线方向 \x20\x20Eigen::Vector3f\x20axis; \x20\x20axis\x20<<\x201,\x200,\x200; \x20\x20seg.setAxis(axis);

\x20\x20//\x20执行霍夫变换 \x20\x20seg.setInputCloud(cloud); \x20\x20seg.segment(inliers,\x20coefficients);

\x20\x20//\x20提取直线内点 \x20\x20pcl::ExtractIndicespcl::PointXYZ\x20extract; \x20\x20extract.setInputCloud(cloud); \x20\x20extract.setIndices(inliers); \x20\x20extract.setNegative(false); \x20\x20pcl::PointCloudpcl::PointXYZ::Ptr\x20line(new\x20pcl::PointCloudpcl::PointXYZ); \x20\x20extract.filter(*line);

\x20\x20//\x20可视化结果 \x20\x20pcl::visualization::PCLVisualizer\x20viewer("3D\x20Viewer"); \x20\x20viewer.setBackgroundColor(0,\x200,\x200); \x20\x20viewer.addPointCloudpcl::PointXYZ(cloud,\x20"cloud"); \x20\x20viewer.addPointCloudpcl::PointXYZ(line,\x20"line"); \x20\x20viewer.setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE,\x201,\x20"cloud"); \x20\x20viewer.setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_COLOR,\x201,\x200,\x200,\x20"line");\x20//\x20设置颜色为红色 \x20\x20viewer.addCoordinateSystem(1.0); \x20\x20viewer.initCameraParameters(); \x20\x20viewer.spin();

\x20\x20//\x20保存结果 \x20\x20pcl::PLYWriter\x20writer; \x20\x20writer.write("D:\DIANYUNWENJIANJIA\拟合中心线_ply.ply",\x20*line);

\x20\x20return\x200;

PCL 点云数据拟合垂直于YZ平面的红色中心线

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

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