zoukankan      html  css  js  c++  java
  • PCL点云处理可视化——法向显示错误“no override found for vtk actor”解决方法

    转:https://blog.csdn.net/bflong/article/details/79137692

    参照:https://blog.csdn.net/imsaws/article/details/15500903

    一、环境 
    Win10 X64 
    VS2015 
    PCL1.8.0AllinOne

    二、代码

    #include "stdafx.h"
    #include <pcl/point_types.h>
    #include <pcl/io/pcd_io.h>
    #include <pcl/kdtree/kdtree_flann.h>
    #include <pcl/features/normal_3d.h>
    #include <pcl/surface/gp3.h>
    #include <pcl/visualization/pcl_visualizer.h>
    #include <pcl/io/pcd_io.h>
    #include <pcl/features/integral_image_normal.h>
    #include <boost/thread/thread.hpp>
    #include <pcl/visualization/pcl_visualizer.h>
    
    
    int main(int argc, char** argv)
    {
        //加载点云模型
        pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
        // pcl::PCLPointCloud2 cloud_blob;
        if (pcl::io::loadPCDFile<pcl::PointXYZ>("rabbit.pcd", *cloud) == -1) {
    
            PCL_ERROR("Could not read file 
    ");
        }
        //* the data should be available in cloud
    
        // Normal estimation*
        //法向计算
        pcl::NormalEstimation<pcl::PointXYZ, pcl::Normal> n;
        pcl::PointCloud<pcl::Normal>::Ptr normals(new pcl::PointCloud<pcl::Normal>);
        //建立kdtree来进行近邻点集搜索
        pcl::search::KdTree<pcl::PointXYZ>::Ptr tree(new pcl::search::KdTree<pcl::PointXYZ>);
        //为kdtree添加点云数据
        tree->setInputCloud(cloud);
    
        n.setInputCloud(cloud);
        n.setSearchMethod(tree);
        //点云法向计算时,需要搜索的近邻点大小
        n.setKSearch(20);
        //开始进行法向计算
        n.compute(*normals);
        //* normals should not contain the point normals + surface curvatures
    
        // Concatenate the XYZ and normal fields*
        //将点云数据与法向信息拼接
        pcl::PointCloud<pcl::PointNormal>::Ptr cloud_with_normals(new pcl::PointCloud<pcl::PointNormal>);
        pcl::concatenateFields(*cloud, *normals, *cloud_with_normals);
    
        /*图形显示模块*/
        //显示设置
        boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer(new pcl::visualization::PCLVisualizer("3D Viewer"));
    
        //设置背景色
        viewer->setBackgroundColor(0, 0, 0.7);
    
        //设置点云颜色,该处为单一颜色设置
        pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> single_color(cloud, 0, 255, 0);
    
        //添加需要显示的点云数据
        viewer->addPointCloud<pcl::PointXYZ>(cloud, single_color, "sample cloud");
    
        //设置点显示大小
        viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, "sample cloud");
    
        //添加需要显示的点云法向。cloud为原始点云模型,normal为法向信息,10表示需要显示法向的点云间隔,即每10个点显示一次法向,5表示法向长度。
        //viewer->addPointCloudNormals<pcl::PointXYZ, pcl::Normal>(cloud, normals, 1, 0.01, "normals");
        viewer->addPointCloudNormals<pcl::PointNormal>(cloud_with_normals, 10, 0.5, "normals");
        //--------------------
        while (!viewer->wasStopped())
        {
            viewer->spinOnce(100);
            boost::this_thread::sleep(boost::posix_time::microseconds(100000));
        }
    
        // Finish
        return (0);
    }

    三、错误描述 
    这里写图片描述 
    这里写图片描述 
    这里写图片描述

    四、解决方法 
    添加如下代码

    #include <vtkAutoInit.h>
    VTK_MODULE_INIT(vtkRenderingOpenGL);
  • 相关阅读:
    工资低的.Net程序员,活该你工资低
    React- jsx的使用 使用 camelCase 语法来设置内联样式. React 会在指定元素数字后自动添加 px
    React 使用jsx
    node.js 简介
    转换成数值 parseInt与parseFloat; (toString) 转化为字符串
    函数 封装性划分私有空间
    favicon 不显示的问题总结1
    js进阶 offset
    前端缓存技术
    图片的预加载与懒加载
  • 原文地址:https://www.cnblogs.com/jiahenhe2/p/11027865.html
Copyright © 2011-2022 走看看