赞
踩
c++版本的pcl安装教程
除了c++版本的pcl,pcl的python版本绑定库主要有两个,一个pcl官方的python-pcl,一个是pclpy。
pclpy的安装请参考系列文章:点云处理库pclpy安装
python-pcl的安装请参考系列文章python-pcl安装教程
GitHub:https://github.com/PointCloudLibrary/pcl
最简单的方式就是使用官方编译好的文件——使用All-in-one installers 进行安装,它将将安装PCL和它的所有依赖,除了Qt。
下载:pcl各版本下载.
安装参考:
博客:https://blog.csdn.net/weixin_42059276/article/details/106149359
旧版网站下载安装:https://web.archive.org/web/20191019170325/http://www.pointclouds.org/downloads/windows.html
新网站下载安装:https://pointclouds.org/downloads/#cross-platform
(就网站上讲的比较详细,新网站上面使用vcpkg安装,时间有限未测试)
下面是windows平台下使用All-in-one installers 进行安装过程:
根据自己visual studio的版本选择相应的All-in-one installers ,以及pdb文件,安装。
比如VS2019 + PCL-1.11.0-AllInOne-msvc2019-win64.exe + pcl-1.11.0-pdb-msvc2019-win64.zip,解压“pcl-1.11.0-pdb-msvc2019-win64.zip”,将解压得到的文件夹中的内容添加“…\PCL 1.11.0\bin”中。
选择安装路径的时候默认C盘,可以改到自己的路径,其他的默认安装即可。
安装到最后的时候会弹出安装OpenNI的提示,此时也会选择安装路径,默认是C盘。但此前安装已经在pcl的安装目录下的3rdParty文件夹中已经有了空的OpenNI2文件夹,建议将OpenNI安装路径改到此文件夹下,即安装路径为“D:\programming\PCL 1.11.0\3rdParty\OpenNI2”
扩展:
如果使用All-in-one installers 安装,又需要调试基于PCL的代码,进入PCL源码,需要下载All-in-one installers对应的PDB存档文件,将其解压之后放在PCL安装路径下的bin文件夹下面,和DLL文件放在一起。一旦调试器需要进入PCL代码,就会要求你输入PCL源代码文件夹。你可以从官网下载源代码pdb。将它解压到磁盘上的某个地方,并给出调试器的路径。
参考:https://web.archive.org/web/20191019170325/http://www.pointclouds.org/downloads/windows.html
在Visual studio中的配置方法其实和OpenCV差不多,导入库文件、头文件,依赖项。
主要是PCL以及它的6个第三方库中的库文件、头文件,依赖项:
vc++目录->包含目录:
D:\programming\PCL 1.11.0\include\pcl-1.11
D:\programming\PCL 1.11.0\3rdParty\Boost\include\boost-1_73
D:\programming\PCL 1.11.0\3rdParty\Eigen\eigen3
D:\programming\PCL 1.11.0\3rdParty\FLANN\include
D:\programming\PCL 1.11.0\3rdParty\Qhull\include
D:\programming\PCL 1.11.0\3rdParty\VTK\include\vtk-8.2
D:\programming\PCL 1.11.0\3rdParty\OpenNI2\Include
vc++目录->库目录:
D:\programming\PCL 1.11.0\lib
D:\programming\PCL 1.11.0\3rdParty\Boost\lib
D:\programming\PCL 1.11.0\3rdParty\FLANN\lib
D:\programming\PCL 1.11.0\3rdParty\Qhull\lib
D:\programming\PCL 1.11.0\3rdParty\VTK\lib
D:\programming\PCL 1.11.0\3rdParty\OpenNI2\Lib
链接器—>输入—>附加的依赖项:
PCL 1.11.0\3rdParty\VTK\lib和PCL 1.11.0\lib这两个文件夹下的lib文件的release版本和Debug版本分别添加到各自的附加依赖项中
由于lib文件较多,手动添加太慢了,可以通过批处理 + python来提取lib文件的名称:
通过批处理把文件夹中的文件名写入到一个txt中:
//win+r调出“运行”窗口并输出cmd
//(填自己的路径)
cd /d D:\programming\PCL 1.11.0\lib
dir /b *.lib *>0.txt
注意,这个0.txt中会把0.txt和一个pkgconfig文件夹也写进去,复制到附加依赖项之前,应该把这两个删掉,否则会报错
对于相同功能的库,两个版本是挨着的,可以用程序把他们分别写到两个txt中。
分离程序:
import numpy as np file = open('0.txt', 'r') i = 0 releaseTxt = [] debugTxt = [] while 1: line = file.readline() line = str(line).replace('\n', '') if not line: break if i%2 == 0: releaseTxt.append(line) else: debugTxt.append(line) i = i + 1 file.close() de = np.array(debugTxt) np.savetxt('debug.txt', de, fmt="%s", delimiter="") re = np.array(releaseTxt) np.savetxt('release.txt', re, fmt="%s", delimiter="")
分离结果如下:
Release版本:
pcl_common.lib pcl_features.lib pcl_filters.lib pcl_io.lib pcl_io_ply.lib pcl_kdtree.lib pcl_keypoints.lib pcl_ml.lib pcl_octree.lib pcl_outofcore.lib pcl_people.lib pcl_recognition.lib pcl_registration.lib pcl_sample_consensus.lib pcl_search.lib pcl_segmentation.lib pcl_stereo.lib pcl_surface.lib pcl_tracking.lib pcl_visualization.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
Debug版本的lib文件:
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
添加环境变量
然后把PCL和第三方库的的DLL文件添加到环境变量里面。(一般在bin下面),将下面的三个路径添加到系统环境变量里面。
PCL 1.11.0\bin
PCL 1.11.0\3rdParty\VTK\bin
PCL 1.11.0\3rdParty\OpenNI2\Redist
扩展:
**静态库:**函数和数据被编译进一个二进制文件,通常扩展名为.lib,在使用静态库的情况下,在编译链接可执行文件时,链接器从库中复制这些函数和数据并把它们和应用程序的其它模块组合起来创建最终的可执行文件。
**动态库:**往往提供2个文件,一个是引入库和一个DLL,引入库包含被DLL导出的函数和变量的符号名,DLL包含实际的函数和数据。在编译链接可执行文件时,只需要链接引入库,DLL中的函数代码和数据并不复制到可执行文件中,在运行的时候,再去加载DLL,访问DLL中导出的函数。
**使用DLL的好处:**1.可以采用多种编程语言来编写;2.增强产品的功能;3.提供二次开发的平台;4.简化项目管理,同时进行开发;5.可以节省磁盘空间和内存,多个程序使用同一种资源;6.有助于资源的共享;7.有助于实现应用程序的本地化。
C/C++—>预处理器—>预处理器定义
添加如下:
BOOST_USE_WINDOWS_H
NOMINMAX
_CRT_SECURE_NO_DEPRECATE
属性->C/C++ ->所有选项->SDL检查 改为否。
项目->属性->C/C++ ->所有选项->SDL检查
#include <iostream> #include <pcl/io/pcd_io.h> #include <pcl/point_types.h> int main (int argc, char** argv) { pcl::PointCloud<pcl::PointXYZ> cloud; // Fill in the cloud data cloud.width = 5; cloud.height = 1; cloud.is_dense = false; cloud.points.resize (cloud.width * cloud.height); for (std::size_t i = 0; i < cloud.points.size (); ++i) { cloud.points[i].x = 1024 * rand () / (RAND_MAX + 1.0f); cloud.points[i].y = 1024 * rand () / (RAND_MAX + 1.0f); cloud.points[i].z = 1024 * rand () / (RAND_MAX + 1.0f); } pcl::io::savePCDFileASCII ("test_pcd.pcd", cloud); std::cerr << "Saved " << cloud.points.size () << " data points to test_pcd.pcd." << std::endl; for (std::size_t i = 0; i < cloud.points.size (); ++i) std::cerr << " " << cloud.points[i].x << " " << cloud.points[i].y << " " << cloud.points[i].z << std::endl; return (0); }
结果:
参考:https://blog.csdn.net/weixin_42059276/article/details/106149359
选择“仅生成”,然后清理,重新生成即可。
“生成+IntelliSense”是说:Visual Studio的IntelliSense功能类似其他IDE中的auto-completion,也就是能够自动补全。对于我来说只要调试就可以,所以关闭,就解决了。
加入 #define _CRT_SECURE_NO_WARNINGS
加入 #pragma warning (disable: 4996)
(你的项目)–>右键 --> 属性, 进去以后,在C++ --> 高级 --> 禁用特定警告 中添加:4996
(你的项目)–>右键 --> 属性, 进去以后,在C++ --> 预处理器 --> 预处理器定义 中添加:_CRT_SECURE_NO_WARNINGS
如果使用“win32应用程序向导”创建项目时,可以将“安全开发生命周期(SDL)检查”的选项去掉
参考:https://www.pianshen.com/article/8983380449/
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。