以下是基于1.8.1版本的PCL库计算点云主方向并输出特征值最大的前三个和其对应特征向量的C++代码:

#include <iostream>
#include <pcl/point_types.h>
#include <pcl/features/normal_3d.h>
#include <pcl/features/principal_curvatures.h>

int main()
{
    pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloudg(new pcl::PointCloud<pcl::PointXYZRGB>);

    // 加载点云数据到cloudg
    
    // 创建法线估计对象
    pcl::NormalEstimation<pcl::PointXYZRGB, pcl::Normal> ne;
    ne.setInputCloud(cloudg);

    // 创建kdtree对象
    pcl::search::KdTree<pcl::PointXYZRGB>::Ptr tree(new pcl::search::KdTree<pcl::PointXYZRGB>);
    ne.setSearchMethod(tree);

    // 计算点云法线
    pcl::PointCloud<pcl::Normal>::Ptr cloud_normals(new pcl::PointCloud<pcl::Normal>);
    ne.setKSearch(10);
    ne.compute(*cloud_normals);

    // 创建主曲率计算对象
    pcl::PrincipalCurvaturesEstimation<pcl::PointXYZRGB, pcl::Normal, pcl::PrincipalCurvatures> pc;
    pc.setInputCloud(cloudg);
    pc.setInputNormals(cloud_normals);

    // 创建kdtree对象
    pc.setSearchMethod(tree);

    // 计算主方向和主曲率
    pcl::PointCloud<pcl::PrincipalCurvatures>::Ptr cloud_curvatures(new pcl::PointCloud<pcl::PrincipalCurvatures>);
    pc.setKSearch(10);
    pc.compute(*cloud_curvatures);

    // 获取特征值和特征向量
    std::vector<float> eigen_values;
    std::vector<Eigen::Vector3f> eigen_vectors;
    for (size_t i = 0; i < cloud_curvatures->size(); i++)
    {
        eigen_values.push_back(cloud_curvatures->points[i].pc1);
        eigen_vectors.push_back(cloud_curvatures->points[i].principal_curvature_x_axis);
    }

    // 对特征值进行排序,获取前三个最大特征值的索引
    std::vector<int> max_indices;
    std::partial_sort_copy(eigen_values.begin(), eigen_values.end(), std::back_inserter(max_indices), std::greater<float>());

    // 输出特征值最大的前三个和对应的特征向量
    for (int i = 0; i < 3; i++)
    {
        std::cout << "Eigen Value " << i+1 << ": " << eigen_values[max_indices[i]] << std::endl;
        std::cout << "Eigen Vector " << i+1 << ": " << eigen_vectors[max_indices[i]].transpose() << std::endl;
    }

    return 0;
}

请注意,以上代码仅提供了一个基本的示例,实际执行时需要根据具体情况进行修改和适配

基于181pcl库计算pclPointCloudpclPointXYZRGBPtr cloudgnew pclPointCloudpclPointXYZRGB的主方向并输出特征值最大的前三个和其对应的特征向量的c++代码

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

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