Win10+VS2019环境下配置点云库PCL1.11.1(超详细)

Win10+VS2019环境下配置点云库PCL1.11.1(超详细)

一、在官网下载PCL1.11.1

在PCL点云库的github中找到releases,下载地址:https://github.com/PointCloudLibrary/pcl/releases
在这里插入图片描述
将这三个文件下载下来,下载过程可能较慢,这里已经下载好了,可在百度网盘自行提取。

链接:https://pan.baidu.com/s/1y1MkpTzp5F_2mtabRrYH9A
提取码:1rh4

二、安装PCL1.11.1

1. 打开下载好的“PCL-1.11.1-AllInOne-msvc2019-win64.exe”文件
在这里插入图片描述
(1)选择第二个,自动添加环境变量,以及最下方的创建桌面快捷方式。
如果安装过程中提示环境变量添加失败,则需要手动添加,稍后介绍手动添加方法。
在这里插入图片描述
(2)选择安装目录,尽量不要装在C盘。这里我设置的路径是:H:\PCL\PCL 1.11.1
一定要记清自己的安装位置!
在这里插入图片描述
(3)之后点击“下一步”,然后点击“安装”。
在这里插入图片描述

【注意】:安装过程中会弹出OpenNI2的安装窗口,将OpenNI2的安装在PCL的3rdParty文件里,路径选择为:H:\PCL\PCL 1.11.1\3rdParty\OpenNI2。

(4)安装完成后PCL文件夹下的内容如下:
在这里插入图片描述
OpenNI2文件夹下的内容如下:
在这里插入图片描述

(5)最后将“pcl-1.11.1-pdb-msvc2019-win64.zip”文件中内容解压,拷贝至“H:\PCL\PCL 1.11.1\bin”文件中。
在这里插入图片描述
至此,安装过程结束。

2. 配置环境变量
如果安装过程提示“因路径太长无法添加环境变量”,则需要手动添加环境变量。
右键此电脑选择“属性”,打开“高级系统设置”,选择“环境变量”。
在这里插入图片描述
(1)在系统变量中可看出,PCL的根目录和OpenNI2的目录已添加。
在这里插入图片描述
没有则手动添加,注意路径与自己设置的安装路径一致。
在这里插入图片描述
在这里插入图片描述

(2)之后双击系统变量中的“Path”,将以下路径添加至环境变量中。(根据自己的安装路径设置)
在这里插入图片描述
具体添加内容如下:

H:\PCL\PCL 1.11.1\bin
H:\PCL\PCL 1.11.1\3rdParty\FLANN\bin
H:\PCL\PCL 1.11.1\3rdParty\VTK\bin
H:\PCL\PCL 1.11.1\3rdParty\Qhull\bin
H:\PCL\PCL 1.11.1\3rdParty\OpenNI2\Tools
%OPENNI2_REDIST64%
%OPENNI2_LIB64%
%OPENNI2_INCLUDE64%

添加完环境变量后重启电脑即可。

三、在VS2019中配置开发环境

1. 新建一个空项目
在这里插入图片描述
设置好项目名称和存储路径,点击“确定”即可。

(1)创建好后先将解决方案配置选择Debug,解决方案平台选择x64。
在这里插入图片描述
(2)然后在源文件中新建一个.cpp 源文件。
在这里插入图片描述
2. 设置属性
右键项目,选择“属性”
在这里插入图片描述
(1)首先配置选择“Debug”,平台选择“x64”,然后选择配置属性–调试–环境
在这里插入图片描述
在环境中选择编辑,添加下列内容。
在这里插入图片描述
在这里插入图片描述
具体内容如下:

H:\PCL\PCL 1.11.1\bin;
H:\PCL\PCL 1.11.1\3rdParty\FLANN\bin;
H:\PCL\PCL 1.11.1\3rdParty\VTK\bin;
H:\PCL\PCL 1.11.1\3rdParty\OpenNI2\Tools

(2)然后在C++中选择“语言”,将“符合模式”改为“否”
在这里插入图片描述
继续在C++中选择“所有选项”,将“SDL检查”改为“否”
在这里插入图片描述
(3)选择“属性管理器”,在“Debug|x64”中右键选择“添加新项目属性表”。
在这里插入图片描述
将名称命名为“PCL1.11.1”,选择好存储位置,这样以后可以直接选择改属性进行环境配置。
在这里插入图片描述
添加好后双击打开该属性页,开始配置。
在这里插入图片描述
(4)在VC++目录中选择“包含目录”,点击编辑,添加7个内容。
在这里插入图片描述
在这里插入图片描述
具体内容如下:

H:\PCL\PCL 1.11.1\include\pcl-1.11
H:\PCL\PCL 1.11.1\3rdParty\Boost\include\boost-1_74
H:\PCL\PCL 1.11.1\3rdParty\Eigen\eigen3
H:\PCL\PCL 1.11.1\3rdParty\FLANN\include
H:\PCL\PCL 1.11.1\3rdParty\OpenNI2\Include
H:\PCL\PCL 1.11.1\3rdParty\Qhull\include
H:\PCL\PCL 1.11.1\3rdParty\VTK\include\vtk-8.2

(5)在VC++目录中选择“库目录”,点击编辑,添加6个内容。
在这里插入图片描述
在这里插入图片描述
具体内容如下:

H:\PCL\PCL 1.11.1\lib
H:\PCL\PCL 1.11.1\3rdParty\Boost\lib
H:\PCL\PCL 1.11.1\3rdParty\FLANN\lib
H:\PCL\PCL 1.11.1\3rdParty\OpenNI2\Lib
H:\PCL\PCL 1.11.1\3rdParty\Qhull\lib
H:\PCL\PCL 1.11.1\3rdParty\VTK\lib

(6)在C/C++中选择“预处理器”,选择“预处理器定义”,点击编辑,添加内容。
在这里插入图片描述
在这里插入图片描述
具体内容如下:

_SCL_SECURE_NO_WARNINGS
_CRT_SECURE_NO_WARNINGS

(7)将C/C++中所有选项的“SDL检查”改为“否”。
在这里插入图片描述
(8)在连接器中选择“输入”,选择“附加依赖项”,点击编辑,添加内容。
在这里插入图片描述
添加内容为PCL根目录下的lib文件(H:\PCL\PCL 1.11.1\lib)和PCL\3rdParty\VTK下的lib文件(H:\PCL\PCL 1.11.1\3rdParty\VTK\lib),debug版本的文件名带有“-gd”后缀。
在这里插入图片描述
具体内容如下:

pcl_commond.lib
pcl_featuresd.lib
pcl_filtersd.lib
pcl_iod.lib
pcl_io_plyd.lib
pcl_kdtreed.lib
pcl_keypointsd.lib
pcl_mld.lib
pcl_octreed.lib
pcl_outofcored.lib
pcl_peopled.lib
pcl_recognitiond.lib
pcl_registrationd.lib
pcl_sample_consensusd.lib
pcl_searchd.lib
pcl_segmentationd.lib
pcl_stereod.lib
pcl_surfaced.lib
pcl_trackingd.lib
pcl_visualizationd.lib
vtkChartsCore-8.2-gd.lib
vtkCommonColor-8.2-gd.lib
vtkCommonComputationalGeometry-8.2-gd.lib
vtkCommonCore-8.2-gd.lib
vtkCommonDataModel-8.2-gd.lib
vtkCommonExecutionModel-8.2-gd.lib
vtkCommonMath-8.2-gd.lib
vtkCommonMisc-8.2-gd.lib
vtkCommonSystem-8.2-gd.lib
vtkCommonTransforms-8.2-gd.lib
vtkDICOMParser-8.2-gd.lib
vtkDomainsChemistry-8.2-gd.lib
vtkDomainsChemistryOpenGL2-8.2-gd.lib
vtkdoubleconversion-8.2-gd.lib
vtkexodusII-8.2-gd.lib
vtkexpat-8.2-gd.lib
vtkFiltersAMR-8.2-gd.lib
vtkFiltersCore-8.2-gd.lib
vtkFiltersExtraction-8.2-gd.lib
vtkFiltersFlowPaths-8.2-gd.lib
vtkFiltersGeneral-8.2-gd.lib
vtkFiltersGeneric-8.2-gd.lib
vtkFiltersGeometry-8.2-gd.lib
vtkFiltersHybrid-8.2-gd.lib
vtkFiltersHyperTree-8.2-gd.lib
vtkFiltersImaging-8.2-gd.lib
vtkFiltersModeling-8.2-gd.lib
vtkFiltersParallel-8.2-gd.lib
vtkFiltersParallelImaging-8.2-gd.lib
vtkFiltersPoints-8.2-gd.lib
vtkFiltersProgrammable-8.2-gd.lib
vtkFiltersSelection-8.2-gd.lib
vtkFiltersSMP-8.2-gd.lib
vtkFiltersSources-8.2-gd.lib
vtkFiltersStatistics-8.2-gd.lib
vtkFiltersTexture-8.2-gd.lib
vtkFiltersTopology-8.2-gd.lib
vtkFiltersVerdict-8.2-gd.lib
vtkfreetype-8.2-gd.lib
vtkGeovisCore-8.2-gd.lib
vtkgl2ps-8.2-gd.lib
vtkglew-8.2-gd.lib
vtkGUISupportMFC-8.2-gd.lib
vtkhdf5-8.2-gd.lib
vtkhdf5_hl-8.2-gd.lib
vtkImagingColor-8.2-gd.lib
vtkImagingCore-8.2-gd.lib
vtkImagingFourier-8.2-gd.lib
vtkImagingGeneral-8.2-gd.lib
vtkImagingHybrid-8.2-gd.lib
vtkImagingMath-8.2-gd.lib
vtkImagingMorphological-8.2-gd.lib
vtkImagingSources-8.2-gd.lib
vtkImagingStatistics-8.2-gd.lib
vtkImagingStencil-8.2-gd.lib
vtkInfovisCore-8.2-gd.lib
vtkInfovisLayout-8.2-gd.lib
vtkInteractionImage-8.2-gd.lib
vtkInteractionStyle-8.2-gd.lib
vtkInteractionWidgets-8.2-gd.lib
vtkIOAMR-8.2-gd.lib
vtkIOAsynchronous-8.2-gd.lib
vtkIOCityGML-8.2-gd.lib
vtkIOCore-8.2-gd.lib
vtkIOEnSight-8.2-gd.lib
vtkIOExodus-8.2-gd.lib
vtkIOExport-8.2-gd.lib
vtkIOExportOpenGL2-8.2-gd.lib
vtkIOExportPDF-8.2-gd.lib
vtkIOGeometry-8.2-gd.lib
vtkIOImage-8.2-gd.lib
vtkIOImport-8.2-gd.lib
vtkIOInfovis-8.2-gd.lib
vtkIOLegacy-8.2-gd.lib
vtkIOLSDyna-8.2-gd.lib
vtkIOMINC-8.2-gd.lib
vtkIOMovie-8.2-gd.lib
vtkIONetCDF-8.2-gd.lib
vtkIOParallel-8.2-gd.lib
vtkIOParallelXML-8.2-gd.lib
vtkIOPLY-8.2-gd.lib
vtkIOSegY-8.2-gd.lib
vtkIOSQL-8.2-gd.lib
vtkIOTecplotTable-8.2-gd.lib
vtkIOVeraOut-8.2-gd.lib
vtkIOVideo-8.2-gd.lib
vtkIOXML-8.2-gd.lib
vtkIOXMLParser-8.2-gd.lib
vtkjpeg-8.2-gd.lib
vtkjsoncpp-8.2-gd.lib
vtklibharu-8.2-gd.lib
vtklibxml2-8.2-gd.lib
vtklz4-8.2-gd.lib
vtklzma-8.2-gd.lib
vtkmetaio-8.2-gd.lib
vtkNetCDF-8.2-gd.lib
vtkogg-8.2-gd.lib
vtkParallelCore-8.2-gd.lib
vtkpng-8.2-gd.lib
vtkproj-8.2-gd.lib
vtkpugixml-8.2-gd.lib
vtkRenderingAnnotation-8.2-gd.lib
vtkRenderingContext2D-8.2-gd.lib
vtkRenderingContextOpenGL2-8.2-gd.lib
vtkRenderingCore-8.2-gd.lib
vtkRenderingExternal-8.2-gd.lib
vtkRenderingFreeType-8.2-gd.lib
vtkRenderingGL2PSOpenGL2-8.2-gd.lib
vtkRenderingImage-8.2-gd.lib
vtkRenderingLabel-8.2-gd.lib
vtkRenderingLOD-8.2-gd.lib
vtkRenderingOpenGL2-8.2-gd.lib
vtkRenderingVolume-8.2-gd.lib
vtkRenderingVolumeOpenGL2-8.2-gd.lib
vtksqlite-8.2-gd.lib
vtksys-8.2-gd.lib
vtktheora-8.2-gd.lib
vtktiff-8.2-gd.lib
vtkverdict-8.2-gd.lib
vtkViewsContext2D-8.2-gd.lib
vtkViewsCore-8.2-gd.lib
vtkViewsInfovis-8.2-gd.lib
vtkzlib-8.2-gd.lib

至此属性全部设置完成,右键“PCL1.11.1”,点击“保存PCL1.11.1”,这样在今后创建新项目时可以选择“添加现有属性表”,直接添加PCL1.11.1,就不用重新配置啦。
在这里插入图片描述

四、测试代码

已经完成环境的配置,下面进行代码测试,看看是否成功。在“源.cpp”中输入代码。
在这里插入图片描述

代码如下:

#include <iostream>
#include <vector>
#include <ctime>
#include <pcl/point_cloud.h>
#include <pcl/octree/octree.h>
#include <boost/thread/thread.hpp>
#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);
	}

	pcl::octree::OctreePointCloudSearch<pcl::PointXYZ> octree(0.1);
	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>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");

	// 等待直到可视化窗口关闭
	while (!viewer->wasStopped())
	{
    
    
		viewer->spinOnce(100);
		boost::this_thread::sleep(boost::posix_time::microseconds(1000));
	}

	return (0);
}

结果如下:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Wxy971122/article/details/117018767