Win10 +VS2017 配置点云库 PCL1.9.1

一、下载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,配置方法完全相同。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,539评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,594评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,871评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,963评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,984评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,763评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,468评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,357评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,850评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,002评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,144评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,823评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,483评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,026评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,150评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,415评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,092评论 2 355