美文网首页
Win10 +VS2017 配置点云库 PCL1.9.1

Win10 +VS2017 配置点云库 PCL1.9.1

作者: 飞菲飞 | 来源:发表于2020-05-11 08:21 被阅读0次

    一、下载PCL1.9.1

    Github下载地址:https://github.com/PointCloudLibrary/pcl/releases

    下载红框内的两个文件

    Github下载速度看人品。

    二、安装

    2.1 安装“PCL-1.9.1-AllInOne-msvc2017-win64.exe”。

    (1)选择第二个,自动添加系统变量

    (2)安装路径选择D盘,系统会自动新建PCL 1.9.1文件夹。

    2.2 安装过程中需要安装OpenNI,选择路径(D:\PCL 1.9.1\3rdParty\OpenNI2)安装即可。

    2.3 全部安装完成后,将pcl-1.9.1-pdb-msvc2017-win64.zip解压后的.pdb文件拷贝到(D:\PCL 1.9.1\bin)中。

    2.4 设置环境变量:右击计算机—属性—高级系统设置—高级—环境变量—用户变量—Path—编辑!

    如下图所示,设置完成后重启电脑。

    在这里直接给出,防止出现错误(依次添加):

    %PCL_ROOT%\3rdParty\FLANN\bin

    %PCL_ROOT%\3rdParty\VTK\bin

    %OPENNI2_REDIST64%

    %OPENNI2_LIB64%

    %OPENNI2_INCLUDE64%

    到此,环境变量的配置完成。

    三、配置

    3.1 新建空项目,

    解决方案配置选择Debug,解决方案平台选择x64。

    3.2  右击工程—属性—VC++目录—包含目录,添加7个include路径

    具体添加的include路径如下:

    D:\PCL 1.9.1\include\pcl-1.9

    D:\PCL 1.9.1\3rdParty\Boost\include\boost-1_68

    D:\PCL 1.9.1\3rdParty\Eigen\eigen3

    D:\PCL 1.9.1\3rdParty\FLANN\include

    D:\PCL 1.9.1\3rdParty\Qhull\include

    D:\PCL 1.9.1\3rdParty\VTK\include\vtk-8.1

    D:\PCL 1.9.1\3rdParty\OpenNI2\Include

    3.3 VC++目录—包含目录,添加6个lib路径

    具体添加的lib路径如下:

    D:\PCL 1.9.1\lib

    D:\PCL 1.9.1\3rdParty\Boost\lib

    D:\PCL 1.9.1\3rdParty\FLANN\lib

    D:\PCL 1.9.1\3rdParty\Qhull\lib

    D:\PCL 1.9.1\3rdParty\OpenNI2\Lib

    D:\PCL 1.9.1\3rdParty\VTK\lib

    3.4 C/C++—常规—SDL检查—否

    此处可能会出现找不到 **C/C++** 选项的情况,解决方案为:

    新建一个C++源文件之后,再打开属性页就可用看到C/C++选项。

    3.5 C/C++—预处理器—预处理器定义—添加:

    _CRT_SECURE_NO_WARNINGS

    _SCL_SECURE_NO_WARNINGS

    _SILENCE_FPOS_SEEKPOS_DEPRECATION_WARNING

    3.6 配置属性—调试—环境—添加:

    PATH=D:\PCL1.9.1\\bin;D:\PCL1.9.1\\3rdParty\FLANN\bin;D:\PCL1.9.1\\3rdParty\VTK\bin;D:\PCL 1.9.1\\3rdParty\OpenNI2\Tools

    3.7 链接器—输入—附加依赖项——添加PCL和VTK的相关lib文件。我用的Debug版本。

    附加依赖项具体添加内容如下:

    输入到属性表里边的时候必须一行对应一个lib才能成功。

    Debug版本

    pcl_common_debug.lib

    pcl_features_debug.lib

    pcl_filters_debug.lib

    pcl_io_debug.lib

    pcl_io_ply_release.lib

    pcl_kdtree_debug.lib

    pcl_keypoints_debug.lib

    pcl_ml_debug.lib

    pcl_octree_debug.lib

    pcl_outofcore_debug.lib

    pcl_people_debug.lib

    pcl_recognition_debug.lib

    pcl_registration_debug.lib

    pcl_sample_consensus_debug.lib

    pcl_search_debug.lib

    pcl_segmentation_debug.lib

    pcl_stereo_debug.lib

    pcl_surface_debug.lib

    pcl_tracking_debug.lib

    pcl_visualization_debug.lib

    vtkalglib-8.1-gd.lib

    vtkChartsCore-8.1-gd.lib

    vtkCommonColor-8.1-gd.lib

    vtkCommonComputationalGeometry-8.1-gd.lib

    vtkCommonCore-8.1-gd.lib

    vtkCommonDataModel-8.1-gd.lib

    vtkCommonExecutionModel-8.1-gd.lib

    vtkCommonMath-8.1-gd.lib

    vtkCommonMisc-8.1-gd.lib

    vtkCommonSystem-8.1-gd.lib

    vtkCommonTransforms-8.1-gd.lib

    vtkDICOMParser-8.1-gd.lib

    vtkDomainsChemistry-8.1-gd.lib

    vtkexoIIc-8.1-gd.lib

    vtkexpat-8.1-gd.lib

    vtkFiltersAMR-8.1-gd.lib

    vtkFiltersCore-8.1-gd.lib

    vtkFiltersExtraction-8.1-gd.lib

    vtkFiltersFlowPaths-8.1-gd.lib

    vtkFiltersGeneral-8.1-gd.lib

    vtkFiltersGeneric-8.1-gd.lib

    vtkFiltersGeometry-8.1-gd.lib

    vtkFiltersHybrid-8.1-gd.lib

    vtkFiltersHyperTree-8.1-gd.lib

    vtkFiltersImaging-8.1-gd.lib

    vtkFiltersModeling-8.1-gd.lib

    vtkFiltersParallel-8.1-gd.lib

    vtkFiltersParallelImaging-8.1-gd.lib

    vtkFiltersPoints-8.1-gd.lib

    vtkFiltersProgrammable-8.1-gd.lib

    vtkFiltersSelection-8.1-gd.lib

    vtkFiltersSMP-8.1-gd.lib

    vtkFiltersSources-8.1-gd.lib

    vtkFiltersStatistics-8.1-gd.lib

    vtkFiltersTexture-8.1-gd.lib

    vtkFiltersTopology-8.1-gd.lib

    vtkFiltersVerdict-8.1-gd.lib

    vtkfreetype-8.1-gd.lib

    vtkGeovisCore-8.1-gd.lib

    vtkgl2ps-8.1-gd.lib

    vtkhdf5-8.1-gd.lib

    vtkhdf5_hl-8.1-gd.lib

    vtkImagingColor-8.1-gd.lib

    vtkImagingCore-8.1-gd.lib

    vtkImagingFourier-8.1-gd.lib

    vtkImagingGeneral-8.1-gd.lib

    vtkImagingHybrid-8.1-gd.lib

    vtkImagingMath-8.1-gd.lib

    vtkImagingMorphological-8.1-gd.lib

    vtkImagingSources-8.1-gd.lib

    vtkImagingStatistics-8.1-gd.lib

    vtkImagingStencil-8.1-gd.lib

    vtkInfovisCore-8.1-gd.lib

    vtkInfovisLayout-8.1-gd.lib

    vtkInteractionImage-8.1-gd.lib

    vtkInteractionStyle-8.1-gd.lib

    vtkInteractionWidgets-8.1-gd.lib

    vtkIOAMR-8.1-gd.lib

    vtkIOCore-8.1-gd.lib

    vtkIOEnSight-8.1-gd.lib

    vtkIOExodus-8.1-gd.lib

    vtkIOExport-8.1-gd.lib

    vtkIOExportOpenGL-8.1-gd.lib

    vtkIOGeometry-8.1-gd.lib

    vtkIOImage-8.1-gd.lib

    vtkIOImport-8.1-gd.lib

    vtkIOInfovis-8.1-gd.lib

    vtkIOLegacy-8.1-gd.lib

    vtkIOLSDyna-8.1-gd.lib

    vtkIOMINC-8.1-gd.lib

    vtkIOMovie-8.1-gd.lib

    vtkIONetCDF-8.1-gd.lib

    vtkIOParallel-8.1-gd.lib

    vtkIOParallelXML-8.1-gd.lib

    vtkIOPLY-8.1-gd.lib

    vtkIOSQL-8.1-gd.lib

    vtkIOTecplotTable-8.1-gd.lib

    vtkIOVideo-8.1-gd.lib

    vtkIOXML-8.1-gd.lib

    vtkIOXMLParser-8.1-gd.lib

    vtkjpeg-8.1-gd.lib

    vtkjsoncpp-8.1-gd.lib

    vtklibharu-8.1-gd.lib

    vtklibxml2-8.1-gd.lib

    vtklz4-8.1-gd.lib

    vtkmetaio-8.1-gd.lib

    vtkNetCDF-8.1-gd.lib

    vtknetcdfcpp-8.1-gd.lib

    vtkoggtheora-8.1-gd.lib

    vtkParallelCore-8.1-gd.lib

    vtkpng-8.1-gd.lib

    vtkproj4-8.1-gd.lib

    vtkRenderingAnnotation-8.1-gd.lib

    vtkRenderingContext2D-8.1-gd.lib

    vtkRenderingContextOpenGL-8.1-gd.lib

    vtkRenderingCore-8.1-gd.lib

    vtkRenderingFreeType-8.1-gd.lib

    vtkRenderingGL2PS-8.1-gd.lib

    vtkRenderingImage-8.1-gd.lib

    vtkRenderingLabel-8.1-gd.lib

    vtkRenderingLIC-8.1-gd.lib

    vtkRenderingLOD-8.1-gd.lib

    vtkRenderingOpenGL-8.1-gd.lib

    vtkRenderingVolume-8.1-gd.lib

    vtkRenderingVolumeOpenGL-8.1-gd.lib

    vtksqlite-8.1-gd.lib

    vtksys-8.1-gd.lib

    vtktiff-8.1-gd.lib

    vtkverdict-8.1-gd.lib

    vtkViewsContext2D-8.1-gd.lib

    vtkViewsCore-8.1-gd.lib

    vtkViewsInfovis-8.1-gd.lib

    vtkzlib-8.1-gd.lib

    四、测试

    示例代码

    #include <iostream>

    #include <vector>

    #include <ctime>

    #include <pcl/point_cloud.h>

    #include <pcl/octree/octree.h>

    #include <pcl/visualization/pcl_visualizer.h>

    using namespace std;

    int

    main(int argc, char**argv)

    {

    srand((unsigned int)time(NULL));

    pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);

    // 创建点云数据

    cloud->width = 1000;

    cloud->height = 1;

    cloud->points.resize(cloud->width * cloud->height);

    for (size_t i = 0; i < cloud->points.size(); ++i)

    {

    cloud->points[i].x = 1024.0f* rand() / (RAND_MAX + 1.0f);

    cloud->points[i].y = 1024.0f* rand() / (RAND_MAX + 1.0f);

    cloud->points[i].z = 1024.0f* rand() / (RAND_MAX + 1.0f);

    }

    float resolution = 128.0f;

    pcl::octree::OctreePointCloudSearch<pcl::PointXYZ> octree(resolution);

    octree.setInputCloud(cloud);

    octree.addPointsFromInputCloud();

    pcl::PointXYZ searchPoint;

    searchPoint.x = 1024.0f* rand() / (RAND_MAX + 1.0f);

    searchPoint.y = 1024.0f* rand() / (RAND_MAX + 1.0f);

    searchPoint.z = 1024.0f* rand() / (RAND_MAX + 1.0f);

    // 体素内近邻搜索

    vector<int>pointIdxVec;

    if (octree.voxelSearch(searchPoint, pointIdxVec))

    {

    cout << "Neighbors within voxel search at (" << searchPoint.x

    << " " << searchPoint.y << " " << searchPoint.z << ")" << endl;

    for (size_t i = 0; i < pointIdxVec.size(); ++i)

    std::cout << "    " << cloud->points[pointIdxVec[i]].x

    << " " << cloud->points[pointIdxVec[i]].y

    << " " << cloud->points[pointIdxVec[i]].z << std::endl;

    }

    //K近邻搜索

    int K = 10;

    vector<int>pointIdxNKNSearch;

    vector<float>pointNKNSquaredDistance;

    cout << "K nearest neighbor search at (" << searchPoint.x

    << " " << searchPoint.y << " " << searchPoint.z << ") with K=" << K << endl;

    if (octree.nearestKSearch(searchPoint, K, pointIdxNKNSearch, pointNKNSquaredDistance) > 0)

    {

    for (size_t i = 0; i < pointIdxNKNSearch.size(); ++i)

    cout << "    " << cloud->points[pointIdxNKNSearch[i]].x << " "

    << cloud->points[pointIdxNKNSearch[i]].y

    << " " << cloud->points[pointIdxNKNSearch[i]].z

    << " (squared distance: " << pointNKNSquaredDistance[i] << ")" << endl;

    }

    //半径内近邻搜索

    vector<int>pointIdxRadiusSearch;

    vector<float>pointRadiusSquaredDistance;

    float radius = 256.0f* rand() / (RAND_MAX + 1.0f);

    cout << "Neighbors within radius search at (" << searchPoint.x

    << " " << searchPoint.y

    << " " << searchPoint.z

    << ") with radius=" << radius << endl;

    if (octree.radiusSearch(searchPoint, radius, pointIdxRadiusSearch, pointRadiusSquaredDistance) > 0)

    {

    for (size_t i = 0; i < pointIdxRadiusSearch.size(); ++i)

    cout << "    " << cloud->points[pointIdxRadiusSearch[i]].x

    << " " << cloud->points[pointIdxRadiusSearch[i]].y

    << " " << cloud->points[pointIdxRadiusSearch[i]].z

    << " (squared distance: " << pointRadiusSquaredDistance[i] << ")" << endl;

    }

    // 初始化点云可视化对象

    boost::shared_ptr<pcl::visualization::PCLVisualizer>viewer(new pcl::visualization::PCLVisualizer("显示点云"));

    viewer->setBackgroundColor(0, 0, 0);  //设置背景颜色为黑色

    // 对点云着色可视化 (red).

    pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ>target_color(cloud, 255, 0, 0);

    viewer->addPointCloud<pcl::PointXYZ>(cloud, target_color, "target cloud");

    viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, "target cloud");

    // 启动可视化

    //viewer->addCoordinateSystem(0.1);  //显示XYZ指示轴

    //viewer->initCameraParameters();  //初始化摄像头参数

    // 等待直到可视化窗口关闭

    while (!viewer->wasStopped())

    {

    viewer->spinOnce(100);

    boost::this_thread::sleep(boost::posix_time::microseconds(1000));

    }

    return (0);

    }

    五、可能报错及解决方案

    1、添加头文件``#include <pcl/registration/icp.h>``编译的时候可能会遇到如下报错:`1>...\flann\algorithms\dist.h(523): error C3861: “pop_t”: 找不到标识符`

    解决方法:

    双击该行输出直接打开`dist.h`头文件,将第503行的`typedef unsigned long long pop_t;`移动到第480行前面(如下图);

    2、可能出现如下情况:

    解决方法:

    3、其他错误情况目前没有

    五、结果

    会出现如下结果,输出的是渲染信息,关掉即可,没什么用。

    至此,PCL1.9.1配置完成!!!!!该版本的PCL点云库兼容VisualStudio2019,配置方法完全相同。

    相关文章

      网友评论

          本文标题:Win10 +VS2017 配置点云库 PCL1.9.1

          本文链接:https://www.haomeiwen.com/subject/exdynhtx.html