美文网首页
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