下载安装PCL
访问PCL的Github官网,进入Release页面,找到PCL 1.11.0,点击进入后在Assets下面可看到4个文件,前两个就是我们需要的。

首先安装.exe包,选择添加环境变量时,勾选为所有用户添加环境变量:

安装路径可以自行更改,这里以D:\pcl-1.11.0为例,路径中最好不要含空格:

安装过程中可能会提示路径过长,忽略即可。安装完后,打开安装目录下的3rdParty\OpenNI2目录,双击OpenNI-Windows-x64-2.2.msi,先点击remove删除已安装的OpenNI,删除后再次打开该安装文件,安装目录选择D:\PCL-1.11.0\3rdParty\OpenNI2。安装完毕后,将之前下载的.zip文件的所有内容解压到D:\PCL-1.11.0\bin下。

添加环境变量
编辑用户的Path环境变量,添加以下内容:

配置Visual Studio
项目属性配置
打开Visual Studio,创建空项目,选择编译环境为64位,Debug版本:

选择菜单栏的“项目”—“属性”,设置调试环境为:
1
| PATH=D:\PCL-1.11.0\\bin;D:\PCL-1.11.0\\3rdParty\FLANN\bin;D:\PCL-1.11.0\\3rdParty\VTK\bin;D:\PCL-1.11.0\\3rdParty\OpenNI2\Tools
|

接着选择“C/C++”—“语言”,将符合模式设置为否:

还要在所有选项中将SDL检查设置为否:

属性表配置
选择菜单栏的“视图”—“其他窗口”—“属性管理器”,在Debug | 64下新建项目属性表,命名为PCL 1.11.0 Debug x64.props:


创建完后,右键点击该属性表,选择属性:

在C/C++的所有选项中,将SDL检查设置为否:

接着配置Include目录:


紧接着配置库目录:


配置预处理器:


接下来配置附加依赖项:

Debug版本:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147
| pcl_kdtreed.lib pcl_stereod.lib pcl_commond.lib pcl_recognitiond.lib pcl_keypointsd.lib pcl_surfaced.lib pcl_featuresd.lib pcl_registrationd.lib pcl_mld.lib pcl_trackingd.lib pcl_filtersd.lib pcl_sample_consensusd.lib pcl_octreed.lib pcl_visualizationd.lib pcl_searchd.lib pcl_io_plyd.lib pcl_outofcored.lib pcl_iod.lib pcl_segmentationd.lib pcl_peopled.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 flann-gd.lib flann_cpp-gd.lib flann_cpp_s-gd.lib flann_s-gd.lib
|
测试环境
编写代码
这里我们写上一段测试代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
| #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);
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); }
|
Debug运行

小结
以上就是在Windows 10操作系统下,为Visual Studio 2019配置点云库PCL 1.11.0的过程。当然,上面用的是debug版本,也可以换成release版本,只要附加依赖的内容换成release的内容即可,这里给出release版本的附加依赖的内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147
| pcl_kdtreed.lib pcl_stereod.lib pcl_commond.lib pcl_recognitiond.lib pcl_keypointsd.lib pcl_surfaced.lib pcl_featuresd.lib pcl_registrationd.lib pcl_mld.lib pcl_trackingd.lib pcl_filtersd.lib pcl_sample_consensusd.lib pcl_octreed.lib pcl_visualizationd.lib pcl_searchd.lib pcl_io_plyd.lib pcl_outofcored.lib pcl_iod.lib pcl_segmentationd.lib pcl_peopled.lib vtkChartsCore-8.2.lib vtkCommonColor-8.2.lib vtkCommonComputationalGeometry-8.2.lib vtkCommonCore-8.2.lib vtkCommonDataModel-8.2.lib vtkCommonExecutionModel-8.2.lib vtkCommonMath-8.2.lib vtkCommonMisc-8.2.lib vtkCommonSystem-8.2.lib vtkCommonTransforms-8.2.lib vtkDICOMParser-8.2.lib vtkDomainsChemistry-8.2.lib vtkDomainsChemistryOpenGL2-8.2.lib vtkdoubleconversion-8.2.lib vtkexodusII-8.2.lib vtkexpat-8.2.lib vtkFiltersAMR-8.2.lib vtkFiltersCore-8.2.lib vtkFiltersExtraction-8.2.lib vtkFiltersFlowPaths-8.2.lib vtkFiltersGeneral-8.2.lib vtkFiltersGeneric-8.2.lib vtkFiltersGeometry-8.2.lib vtkFiltersHybrid-8.2.lib vtkFiltersHyperTree-8.2.lib vtkFiltersImaging-8.2.lib vtkFiltersModeling-8.2.lib vtkFiltersParallel-8.2.lib vtkFiltersParallelImaging-8.2.lib vtkFiltersPoints-8.2.lib vtkFiltersProgrammable-8.2.lib vtkFiltersSelection-8.2.lib vtkFiltersSMP-8.2.lib vtkFiltersSources-8.2.lib vtkFiltersStatistics-8.2.lib vtkFiltersTexture-8.2.lib vtkFiltersTopology-8.2.lib vtkFiltersVerdict-8.2.lib vtkfreetype-8.2.lib vtkGeovisCore-8.2.lib vtkgl2ps-8.2.lib vtkglew-8.2.lib vtkGUISupportMFC-8.2.lib vtkhdf5-8.2.lib vtkhdf5_hl-8.2.lib vtkImagingColor-8.2.lib vtkImagingCore-8.2.lib vtkImagingFourier-8.2.lib vtkImagingGeneral-8.2.lib vtkImagingHybrid-8.2.lib vtkImagingMath-8.2.lib vtkImagingMorphological-8.2.lib vtkImagingSources-8.2.lib vtkImagingStatistics-8.2.lib vtkImagingStencil-8.2.lib vtkInfovisCore-8.2.lib vtkInfovisLayout-8.2.lib vtkInteractionImage-8.2.lib vtkInteractionStyle-8.2.lib vtkInteractionWidgets-8.2.lib vtkIOAMR-8.2.lib vtkIOAsynchronous-8.2.lib vtkIOCityGML-8.2.lib vtkIOCore-8.2.lib vtkIOEnSight-8.2.lib vtkIOExodus-8.2.lib vtkIOExport-8.2.lib vtkIOExportOpenGL2-8.2.lib vtkIOExportPDF-8.2.lib vtkIOGeometry-8.2.lib vtkIOImage-8.2.lib vtkIOImport-8.2.lib vtkIOInfovis-8.2.lib vtkIOLegacy-8.2.lib vtkIOLSDyna-8.2.lib vtkIOMINC-8.2.lib vtkIOMovie-8.2.lib vtkIONetCDF-8.2.lib vtkIOParallel-8.2.lib vtkIOParallelXML-8.2.lib vtkIOPLY-8.2.lib vtkIOSegY-8.2.lib vtkIOSQL-8.2.lib vtkIOTecplotTable-8.2.lib vtkIOVeraOut-8.2.lib vtkIOVideo-8.2.lib vtkIOXML-8.2.lib vtkIOXMLParser-8.2.lib vtkjpeg-8.2.lib vtkjsoncpp-8.2.lib vtklibharu-8.2.lib vtklibxml2-8.2.lib vtklz4-8.2.lib vtklzma-8.2.lib vtkmetaio-8.2.lib vtkNetCDF-8.2.lib vtkogg-8.2.lib vtkParallelCore-8.2.lib vtkpng-8.2.lib vtkproj-8.2.lib vtkpugixml-8.2.lib vtkRenderingAnnotation-8.2.lib vtkRenderingContext2D-8.2.lib vtkRenderingContextOpenGL2-8.2.lib vtkRenderingCore-8.2.lib vtkRenderingExternal-8.2.lib vtkRenderingFreeType-8.2.lib vtkRenderingGL2PSOpenGL2-8.2.lib vtkRenderingImage-8.2.lib vtkRenderingLabel-8.2.lib vtkRenderingLOD-8.2.lib vtkRenderingOpenGL2-8.2.lib vtkRenderingVolume-8.2.lib vtkRenderingVolumeOpenGL2-8.2.lib vtksqlite-8.2.lib vtksys-8.2.lib vtktheora-8.2.lib vtktiff-8.2.lib vtkverdict-8.2.lib vtkViewsContext2D-8.2.lib vtkViewsCore-8.2.lib vtkViewsInfovis-8.2.lib vtkzlib-8.2.lib flann.lib flann_cpp.lib flann_cpp_s.lib flann_s.lib
|