WIN10+VS2015+Python3.6下配置 PCL18.0以及python-pcl

WIN10+VS2015+Python3.6配置 PCL18.0

参考来源

  • 配置过程

参考博客1
参考博客2

参考博客3 ***(主要参考)

参考博客

配置环境

系统: WIN10 家庭版
VS版本: 2015
python版本: python3.6
IDE: Pycharm

配置概览

  1. PCL及依赖项安装
  2. 配置系统环境变量
  3. 配置VS2015
    这一步在许多博客里面都被忽略掉了,或者只是照搬其他人的步骤,导致在配具体的库文件的时候出现很多问题。
    1. 配置包含目录
    2. 配置库目录
    3. 配置依赖库名称
  4. 配置python-pcl的依赖项-cython、numpy
  5. 配置python-pcl依赖项,GTK+
  6. 配置python-pcl

配置准备

PCL1.8 for VS2015 PCL 1.8.0 All-in-one InstallerMSVC2015 x64 onedrive全速下载
PCL1.8 for VS2015 PCL 1.8.0 All-in-one InstallerMSVC2015 x64 百度网盘下载
这个安装包名称的意思,表示为PCL为18.0版本,Visual studio 为2015版本,电脑为64位系统,如果自己的visual studio 不是2015版本的,则从下面链接中下载对应的版本,不要试图尝试新的办法。
PCL其他版本下载
python-pcl下载
Windows GTK+ 下载
这边根据我的电脑选择gtk±bundle_3.6.4-20130513_win64.zip\下载

注意:据说 GTK+ 3.x版本跟Python2.7不兼容,此处不待考究下载了gtk±bundle_3.6.4-20130513_win64.zip,电脑位数永远要注意。——自参考博客3

配置过程

PCL安装

  1. 点击下载好的EXE进行安装.安装时,选择“Add PCL to the system PATH for all users”
  2. 最好把OpenNi的路径设置在"(根目录)\PCL 1.8.0\3rdParty"下面
    (Note:如果在OpenNi安装阶段显示失败,则考虑是否VS版本不对,选择其他版本下载。)

设置系统环境变量

  1. 确认系统变量中是否存在PCL_ROOT.没有则添加,变量值为自己的PCL路径
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MbJcKBe7-1578558717183)(en-resource://database/4614:1)]

  2. 在环境变量"path"添加如下变量

C:\Program Files (x86)\PCL 1.8.1\bin
C:\Program Files (x86)\PCL 1.8.1\3rdParty\FLANN\bin;
C:\Program Files (x86)\PCL 1.8.1\3rdParty\VTK\bin;
C:\Program Files (x86)\PCL 1.8.1\3rdParty\Qhull\bin
C:\Program Files (x86)\PCL 1.8.1\3rdParty\OpenNI2\Tools
————————————————
原文链接:https://blog.csdn.net/YunLaowang/article/details/86086115

配置VS2015

按理说只配置python-pcl这边应该可以不用的,但是为了测试环境是否配置成功 还是需要按常规走一下
1、新建一个空的项目
在这里插入图片描述
2. 设置为debug、64模式
右键项目选中属性
在这里插入图片描述
引自参考博客3
2、配置包含目录与库目录
引自参考文献3—————引自参考博客3

  • 包含目录

在这里插入图片描述

X:\PCL\PCL 1.8.1\3rdParty\OpenNI2\Include
X:\PCL\PCL 1.8.1\include\pcl-1.8
X:\PCL\PCL 1.8.1\3rdParty\VTK\include\vtk-8.0
X:\PCL\PCL 1.8.1\3rdParty\Qhull\include
X:\PCL\PCL 1.8.1\3rdParty\FLANN\include
X:\PCL\PCL 1.8.1\3rdParty\Eigen\eigen3
X:\PCL\PCL 1.8.1\3rdParty\Boost\include\boost-1_6
  • 库目录
    在这里插入图片描述
X:\PCL\PCL 1.8.1\3rdParty\OpenNI2\Lib
X:\PCL\PCL 1.8.1\3rdParty\VTK\lib
X:\PCL\PCL 1.8.1\3rdParty\Qhull\lib
X:\PCL\PCL 1.8.1\3rdParty\FLANN\lib
X:\PCL\PCL 1.8.1\3rdParty\Boost\lib
X:\PCL\PCL 1.8.1\lib

3、配置附加依赖项
在这里插入图片描述
这一项最容易出错,网上的博客都是直接 n’j罗列出自己的库文件名称,但是不同版本的PCL 这些库文件名称都不一样。
最好的方式是自己到以上添加的库目录下,看看里面都有哪些库文件,自己一个一个添加进去,才是最安全的,下文有介绍获得这些库文件名称的简便方法。

  • NOTE: opengl32.lib,这个文件不在pcl目录下,但在依赖项里面要添加。OpenNi只有一个OpenNI2.lib库文件

下面的这个库目录下,如果你的工程类型是debug模式,那么应该添加 后面携带"-gd-"的那个库文件。如果是release模式的话,就添加另外一个。
在这里插入图片描述
我个人的依赖项清单:

opengl32.lib
OpenNI2.lib
libboost_math_tr1l-vc140-mt-gd-1_61.lib
libboost_mpi-vc140-mt-gd-1_61.lib
libboost_prg_exec_monitor-vc140-mt-gd-1_61.lib
libboost_program_options-vc140-mt-gd-1_61.lib
libboost_random-vc140-mt-gd-1_61.lib
libboost_regex-vc140-mt-gd-1_61.lib
libboost_serialization-vc140-mt-gd-1_61.lib
libboost_signals-vc140-mt-gd-1_61.lib
libboost_system-vc140-mt-gd-1_61.lib
libboost_test_exec_monitor-vc140-mt-gd-1_61.lib
libboost_thread-vc140-mt-gd-1_61.lib
libboost_timer-vc140-mt-gd-1_61.lib
libboost_type_erasure-vc140-mt-gd-1_61.lib
libboost_unit_test_framework-vc140-mt-gd-1_61.lib
libboost_wave-vc140-mt-gd-1_61.lib
libboost_wserialization-vc140-mt-gd-1_61.lib
libboost_atomic-vc140-mt-gd-1_61.lib
libboost_chrono-vc140-mt-gd-1_61.lib
libboost_container-vc140-mt-gd-1_61.lib
libboost_context-vc140-mt-gd-1_61.lib
libboost_coroutine-vc140-mt-gd-1_61.lib
libboost_date_time-vc140-mt-gd-1_61.lib
libboost_exception-vc140-mt-gd-1_61.lib
libboost_filesystem-vc140-mt-gd-1_61.lib
libboost_graph-vc140-mt-gd-1_61.lib
libboost_iostreams-vc140-mt-gd-1_61.lib
libboost_locale-vc140-mt-gd-1_61.lib
libboost_log-vc140-mt-gd-1_61.lib
libboost_log_setup-vc140-mt-gd-1_61.lib
libboost_math_c99-vc140-mt-gd-1_61.lib
libboost_math_c99f-vc140-mt-gd-1_61.lib
libboost_math_c99l-vc140-mt-gd-1_61.lib
libboost_math_tr1-vc140-mt-gd-1_61.lib
libboost_math_tr1f-vc140-mt-gd-1_61.lib
flann_cpp_s-gd.lib
flann_s-gd.lib
flann-gd.lib
qhull_d.lib
qhull_p_d.lib
qhull_r_d.lib
qhullcpp_d.lib
qhullstatic_d.lib
qhullstatic_r_d.lib
vtkalglib-7.0-gd.lib
vtkChartsCore-7.0-gd.lib
vtkCommonColor-7.0-gd.lib
vtkCommonComputationalGeometry-7.0-gd.lib
vtkCommonCore-7.0-gd.lib
vtkCommonDataModel-7.0-gd.lib
vtkCommonExecutionModel-7.0-gd.lib
vtkCommonMath-7.0-gd.lib
vtkCommonMisc-7.0-gd.lib
vtkCommonSystem-7.0-gd.lib
vtkCommonTransforms-7.0-gd.lib
vtkDICOMParser-7.0-gd.lib
vtkDomainsChemistry-7.0-gd.lib
vtkexoIIc-7.0-gd.lib
vtkexpat-7.0-gd.lib
vtkFiltersAMR-7.0-gd.lib
vtkFiltersCore-7.0-gd.lib
vtkFiltersExtraction-7.0-gd.lib
vtkFiltersFlowPaths-7.0-gd.lib
vtkFiltersGeneral-7.0-gd.lib
vtkFiltersGeneric-7.0-gd.lib
vtkFiltersGeometry-7.0-gd.lib
vtkFiltersHybrid-7.0-gd.lib
vtkFiltersHyperTree-7.0-gd.lib
vtkFiltersImaging-7.0-gd.lib
vtkFiltersModeling-7.0-gd.lib
vtkFiltersParallel-7.0-gd.lib
vtkFiltersParallelImaging-7.0-gd.lib
vtkFiltersProgrammable-7.0-gd.lib
vtkFiltersSelection-7.0-gd.lib
vtkFiltersSMP-7.0-gd.lib
vtkFiltersSources-7.0-gd.lib
vtkFiltersStatistics-7.0-gd.lib
vtkFiltersTexture-7.0-gd.lib
vtkFiltersVerdict-7.0-gd.lib
vtkfreetype-7.0-gd.lib
vtkGeovisCore-7.0-gd.lib
vtkgl2ps-7.0-gd.lib
vtkhdf5_hl-7.0-gd.lib
vtkhdf5-7.0-gd.lib
vtkImagingColor-7.0-gd.lib
vtkImagingCore-7.0-gd.lib
vtkImagingFourier-7.0-gd.lib
vtkImagingGeneral-7.0-gd.lib
vtkImagingHybrid-7.0-gd.lib
vtkImagingMath-7.0-gd.lib
vtkImagingMorphological-7.0-gd.lib
vtkImagingSources-7.0-gd.lib
vtkImagingStatistics-7.0-gd.lib
vtkImagingStencil-7.0-gd.lib
vtkInfovisCore-7.0-gd.lib
vtkInfovisLayout-7.0-gd.lib
vtkInteractionImage-7.0-gd.lib
vtkInteractionStyle-7.0-gd.lib
vtkInteractionWidgets-7.0-gd.lib
vtkIOAMR-7.0-gd.lib
vtkIOCore-7.0-gd.lib
vtkIOEnSight-7.0-gd.lib
vtkIOExodus-7.0-gd.lib
vtkIOExport-7.0-gd.lib
vtkIOGeometry-7.0-gd.lib
vtkIOImage-7.0-gd.lib
vtkIOImport-7.0-gd.lib
vtkIOInfovis-7.0-gd.lib
vtkIOLegacy-7.0-gd.lib
vtkIOLSDyna-7.0-gd.lib
vtkIOMINC-7.0-gd.lib
vtkIOMovie-7.0-gd.lib
vtkIONetCDF-7.0-gd.lib
vtkIOParallel-7.0-gd.lib
vtkIOParallelXML-7.0-gd.lib
vtkIOPLY-7.0-gd.lib
vtkIOSQL-7.0-gd.lib
vtkIOVideo-7.0-gd.lib
vtkIOXML-7.0-gd.lib
vtkIOXMLParser-7.0-gd.lib
vtkjpeg-7.0-gd.lib
vtkjsoncpp-7.0-gd.lib
vtklibxml2-7.0-gd.lib
vtkmetaio-7.0-gd.lib
vtkNetCDF_cxx-7.0-gd.lib
vtkNetCDF-7.0-gd.lib
vtkoggtheora-7.0-gd.lib
vtkParallelCore-7.0-gd.lib
vtkpng-7.0-gd.lib
vtkproj4-7.0-gd.lib
vtkRenderingAnnotation-7.0-gd.lib
vtkRenderingContext2D-7.0-gd.lib
vtkRenderingContextOpenGL-7.0-gd.lib
vtkRenderingCore-7.0-gd.lib
vtkRenderingFreeType-7.0-gd.lib
vtkRenderingGL2PS-7.0-gd.lib
vtkRenderingImage-7.0-gd.lib
vtkRenderingLabel-7.0-gd.lib
vtkRenderingLIC-7.0-gd.lib
vtkRenderingLOD-7.0-gd.lib
vtkRenderingOpenGL-7.0-gd.lib
vtkRenderingVolume-7.0-gd.lib
vtkRenderingVolumeOpenGL-7.0-gd.lib
vtksqlite-7.0-gd.lib
vtksys-7.0-gd.lib
vtktiff-7.0-gd.lib
vtkverdict-7.0-gd.lib
vtkViewsContext2D-7.0-gd.lib
vtkViewsCore-7.0-gd.lib
vtkViewsInfovis-7.0-gd.lib
vtkzlib-7.0-gd.lib
pcl_common_debug.lib
pcl_features_debug.lib
pcl_filters_debug.lib
pcl_io_debug.lib
pcl_io_ply_debug.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
  • 这边介绍一个快速提取库目录下所有库文件名称的方法。

在相应的lib目录下,新建一个txt文本,内容如下

@echo off
dir /b /on "*d.lib"> list.txt

这边的 ”*d.lib“ 是正则表达式,表示搜索xxxxd.lib文件的名字,根据需求自己更改一下,如上述文件夹中 两种文件的区别 在于一个有“-gd-61.lib”一个没有,那么这边就可以改成

@echo off
dir /b /on "*-gd-61.lib"> list.txt       
前面的  * 表示前面为任意符号

之后将.txt后缀名改为.bat,然后双击运行,在同样的目录下将生成list.txt文本,里面便是所需要的文件名字清单
在这里插入图片描述
4、测试环境是否成功

引用于参考博客3
#include <pcl/visualization/cloud_viewer.h>
#include <iostream>
#include <pcl/io/io.h>
#include <pcl/io/pcd_io.h>
#include <vtkAutoInit.h>

VTK_MODULE_INIT(vtkInteractionStyle);
VTK_MODULE_INIT(vtkRenderingFreeType);
VTK_MODULE_INIT(vtkRenderingOpenGL);

int user_data;
void viewerOneoff(pcl::visualization::PCLVisualizer& viewer) {
    viewer.setBackgroundColor(1.0, 0.5, 1.0);
    pcl::PointXYZ o;
    o.x = 1.0;
    o.y = 0;
    o.z = 0;
    viewer.addSphere(o, 0.25, "sphere", 0);
    std::cout << "i only run once" << std::endl;
}
void viewerPsycho(pcl::visualization::PCLVisualizer& viewer)
{
    static unsigned count = 0;
    std::stringstream ss;
    ss << "Once per viewer loop: " << count++;
    viewer.removeShape("text", 0);
    viewer.addText(ss.str(), 200, 300, "text", 0);
    user_data++;
}
int main()
{
    pcl::PointCloud<pcl::PointXYZRGBA>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZRGBA>);
    pcl::io::loadPCDFile("rabbit.pcd", *cloud);//注意替换自己的pcd点云数据
    pcl::visualization::CloudViewer viewer("Cloud Viewer");
    viewer.showCloud(cloud);
    viewer.runOnVisualizationThreadOnce(viewerOneoff);
    viewer.runOnVisualizationThread(viewerPsycho);
    while (!viewer.wasStopped())
    {
        user_data++;
    }
    return 0;
}

如果生成方案能成功基本上就没什么问题了。

Python-PCL配置

  1. 将下载的python-pcl压缩包解压
  2. 将bin目录下的文件拷贝到上一个步骤解压的python-pcl-master文件夹下的pkg-config文件夹中。
    3、依赖项
pip install cython==0.25.2
pip install numpy

1、setup.py文件中修改版本号

这一步是多数采用pip直接安装的时候报错的原因,在于其默认的部分依赖项的版本号不对。其默认PCL18.0对应的boost_version 为1.64和vtk的版本为8.0.
打开 python-pcl-master文件夹下的setup.py
找到203行,把对应第三方库文件版本改为自己使用的
原来的:
在这里插入图片描述
自己的版本进入一下目录查看
在这里插入图片描述
在这里插入图片描述
改完后:

在这里插入图片描述

2、Python-pcl 环境变量设置

变量名称:PKG_CONFIG_PATH
变量值:D:\a1PCL 1.8.0\lib\pkgconfig\
D:\a1PCL 1.8.0\3rdParty\FLANN\lib\pkgconfig\
D:\a1PCL 1.8.0\3rdParty\Eigen\lib\pkgconfig\

3、Python-PCL编译
在python-pcl-master目录下,打开powershell,按住shift+右键 便有这个选项

python setup.py build_ext -i
python setup.py install

成功会提示代码已经生成
在这里插入图片描述

python测试

在这里插入图片描述
成功

问题记录

直接安装plc all in one.exe时 OpenNI提示失败

措施:下载的安装包对应的VS版本时2010的。需要更改安装包为PCL18.0+2015VS的

VS配置测试,C4996错误

参考博客

VS配置测试,pcl链接出错

在这里插入图片描述
参考博客
我的问题是在依赖库里面没有添加pcl自己的库文件。

VS 配置测试,vtk链接出错

参考博客
我个人的主要问题在于没有添加
opengl32.lib这个库。

build python-pcl时 一直显示找不到文件

在这里插入图片描述
原因:细看里面的提示内容才发现,其中要查找的版本于我们安装的第三方库的版本都是对不上的。

用pip直接安装python-pcl时一直显示找不到文件

在这里插入图片描述
原因:pip按自动安装默认pcl的第三方的库的版本不对,
措施:采用编译安装,过程见文中

发布了3 篇原创文章 · 获赞 0 · 访问量 139

猜你喜欢

转载自blog.csdn.net/scy261983626/article/details/103954236