#include #include <pcl/io/ply_io.h> #include <pcl/point_types.h> #include <pcl/point_cloud.h> #include <pcl/features/normal_3d.h> #include <pcl/filters/voxel_grid.h> #include <pcl/surface/mls.h> #include <pcl/features/principal_curvatures.h> #include <pcl/features/normal_3d_omp.h> #include <pcl/surface/poisson.h> #include <pcl/visualization/pcl_visualizer.h> #include <pcl/common/thread.h> // 添加此头文件以获取可用线程数量

int main() { // 获取可用线程数量 int num_threads = pcl::getNumThreads(); std::cout << "Available threads: " << num_threads << std::endl;

// 确保传递给线程数量的参数是一个正数
if (num_threads <= 0) {
    num_threads = 1;
}

// 设置线程数量
pcl::setNumThreads(num_threads);

// 加载点云数据
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
pcl::io::loadPLYFile<pcl::PointXYZ>("D:\\DIANYUNWENJIANJIA\\qiepianfenge_ply.ply", *cloud);

/* 下采样
pcl::VoxelGrid<pcl::PointXYZ> sor;
sor.setInputCloud(cloud);
sor.setLeafSize(0.01f, 0.01f, 0.01f);
sor.filter(*cloud);
*/
// 计算法线
pcl::NormalEstimationOMP<pcl::PointXYZ, pcl::Normal> ne;
ne.setInputCloud(cloud);
pcl::search::KdTree<pcl::PointXYZ>::Ptr tree(new pcl::search::KdTree<pcl::PointXYZ>());
ne.setSearchMethod(tree);
pcl::PointCloud<pcl::Normal>::Ptr cloud_normals(new pcl::PointCloud<pcl::Normal>);
ne.setRadiusSearch(0.03);
ne.compute(*cloud_normals);

// 计算主曲率
pcl::PrincipalCurvaturesEstimation<pcl::PointXYZ, pcl::Normal, pcl::PrincipalCurvatures> pc;
pc.setInputCloud(cloud);
pc.setInputNormals(cloud_normals);
pc.setSearchMethod(tree);
pcl::PointCloud<pcl::PrincipalCurvatures>::Ptr cloud_curvatures(new pcl::PointCloud<pcl::PrincipalCurvatures>);
pc.setRadiusSearch(0.03);
pc.compute(*cloud_curvatures);

// 构建骨架点云
pcl::PointCloud<pcl::PointXYZ>::Ptr skeleton(new pcl::PointCloud<pcl::PointXYZ>);
for (int i = 0; i < cloud->size(); ++i) {
    if (cloud_curvatures->points[i].pc1 <= 0.01) {
        skeleton->points.push_back(cloud->points[i]);
    }
}
skeleton->width = skeleton->size();
skeleton->height = 1;

// 保存骨架点云
pcl::PLYWriter writer;
writer.write<pcl::PointXYZ>("D:\\DIANYUNWENJIANJIA\\chushigujiahua_ply.ply", *skeleton);

return 0;
#include iostream#include pclioply_ioh#include pclpoint_typesh#include pclpoint_cloudh#include pclfeaturesnormal_3dh#include pclfiltersvoxel_gridh#include pclsurfacemlsh#include pclfeaturesprincipal_c

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

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