Apprentissage PCL de la bibliothèque de nuages de points: estimation et affichage normaux

Présentation:

La surface normale est un attribut important de la surface géométrique et joue un rôle important dans la segmentation du nuage de points du modèle et le calcul de la description des entités. Voici l'extraction et l'affichage des normales. Lorsque vous l'utilisez, sélectionnez l'échelle de voisinage appropriée.

Implémentation du code:

#include <vtkAutoInit.h>
VTK_MODULE_INIT(vtkRenderingOpenGL);
VTK_MODULE_INIT(vtkInteractionStyle);
#include <iostream>
#include <pcl/point_types.h>
#include <pcl/features/normal_3d.h>
#include <pcl/io/io.h>
#include <pcl/io/pcd_io.h>
#include <pcl/visualization/pcl_visualizer.h>

int main(int argc, char **argv)
{
    //读取点云
    pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
    if
(pcl::io::loadPCDFile<pcl::PointXYZ>("steelCoil.pcd", *cloud) == -1)
    {
        PCL_ERROR("Cloudn't read file!");
        system("pause");
        return -1;
    }
    
    //估计法线
    pcl::NormalEstimation<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.6);  //使用半径0.6范围内的所有邻元素估计法线
    ne.compute(*cloud_normals);   

    //可视化
    pcl::visualization::PCLVisualizer viewer("PCL Viewer");
    viewer.setBackgroundColor(0.0,
0.0, 0.0);
    //显示点云与法线,1和0.5可以调整法线的疏密与长短
    viewer.addPointCloudNormals<pcl::PointXYZ, pcl::Normal>(cloud,
cloud_normals, 1, 0.5, "normals");

    while (!viewer.wasStopped())
    {
        viewer.spinOnce(100);
    }
    return 0;
} 

Effet:

Insérez la description de l'image ici

Publié 22 articles originaux · Likes2 · Visites 1157

Je suppose que tu aimes

Origine blog.csdn.net/qinqinxiansheng/article/details/105498140
conseillé
Classement