pcl配置(2)

本文详细介绍在Windows环境下使用Visual Studio 2010及CMake编译Point Cloud Library (PCL) 的过程。PCL是一款强大的开源点云处理库,支持滤波、特征估计等多种算法。
 

菜鸟编译pcl

  727人阅读  评论(11)  收藏  举报

Point cloud library是一个开源、跨平台的点云处理库,pcl框架涵盖了当前最先进的点云处理相关算法,涉及滤波、特征估计、表面重建、注册、模型拟合、分割等。Pcl基于BSD协议,可免费用于商业和研究应用,适用于Linux、MacOS、Windows、Android平台。

官方网站为:www.pointclouds.org

这里发布了一些视频demo:http://www.youtube.com/user/pointclouds

相关教程、说明文件:http://www.pointclouds.org/documentation/

 

闲话少叙,下面进入本文主题:如何在windows平台上编译pcl。

官方编译教程在此:http://www.pointclouds.org/documentation/tutorials/compiling_pcl_windows_3rdparty_installers.php#compiling-pcl-windows-3rdparty-installers,可参照此网页逐步操作。

不喜欢编译的童鞋也可到此下载已经编译好的安装文件包:http://www.pointclouds.org/downloads/windows.html

下边给出笔者自行编译的过程:

(1)    平台需求:Windows 7 (x86 or x64),Visual Studio 2010(必须是2010版本!!),cmake 2.8以上版本,Microsoft Kinect (作为点云采集设备,不是必须的),主机配置要求不高,在i3笔记本上亦可运行。

(2)    外部链接库:

  • Boost version 1.46.1
  • Eigen version 3.0.0
  • CMinpack version 1.1.3
  • FLANN version 1.6.9
  • Visualization ToolKit (VTK) version 5.6.1 (非必须)
  • QHULL version 2011.1 (非必须)
  • OpenNI version 1.1.0.41 and patched Sensor Module version 5.0.1.32 (非必须,用kinect的话必须)
  •  GTest version >= 1.6.0 (非必须)

以上链接库安装文件均可在http://www.pointclouds.org/downloads/windows.html,处下载。pcl开发者网站上还有一处下载链接列表,更加全面:http://dev.pointclouds.org/projects/pcl/files。上述文件下载好了直接双击安装即可,鉴于我们是菜鸟,建议全部安装到默认目录下,以免cmake找不到~

(3)    下载pcl源码:

笔者安装的是1.2版本,目前最新版本为1.3。都可以在这里下载到:http://dev.pointclouds.org/projects/pcl/files

(4)    cmake配置:

首先选择生成visual studio 10 的工程。如果把外部库全部安装到默认目录下了的话,剩下就简单了,cmake应该可以全部找到,如果没找到请参照http://www.pointclouds.org/documentation/tutorials/compiling_pcl_windows_3rdparty_installers.php#compiling-pcl-windows-3rdparty-installers。完事点配置、生成就OK了。

(5)    编译pcl:

当我们成功生成pcl的解决方案之后,就可以开始编译了。

接下来,经过漫长的等待,能不能编译成功就是看人品的事了。。

笔者试过4台计算机,其中只有2台能够成功编译,其他两台都是因为cmake宏与vs的各种冲突导致编译失败。

如果编译失败,可以只编译pcl_开头的几个工程,可以生成pcl的链接库(dll 和 lib),这就足够了。

(6)    使用pcl:

如果读者有幸编译成功了整个解决方案,那就可以运行其自带的几个例子了,其中大部分都是用kinect做采集设备的。

包括:openni_viewer(查看kinect采集的点云),openni_passthrough(为kinect采集的点云做一个带通),openni_3d_convex_hull(找凸包的),openni_ii_normal_estimation(估计法线),openni_planar_segmentation(平面分割)等等,还有一些pcd_viewer(查看pcd文件,即点云数据point cloud data)等不用kinect的。

如果没编译成功,我们也可以自己写cmake来进行配置,下面给出一个cmake的例子,仅供参考:

 

cmake_minimum_required(VERSION 2.8 FATAL_ERROR)

 

# 解决方案名

project(pcl_tutorial)

 

# 包含目录

include_directories("C:/Program Files/Boost/include"

"C:/Program Files/Eigen 3.0.0/include/eigen3"

"C:/Program Files/flann 1.6.9/include"

"C:/Program Files/OpenNI/Include"

"C:/Program Files/PCL/include/pcl-1.2"

"C:/Program Files/VTK/include/vtk-5.6")

 

# 附加库目录

link_directories("E:/pcl/pcl-project/lib"

"C:/Program Files/Boost/lib/"

"C:/Program Files/OpenNI/Lib/"

"C:/Program Files/flann 1.6.9/lib"

"C:/Program Files/VTK/lib/vtk-5.6")

 

# pcl库 PCL_LIBRARIES

set(PCL_LIBRARIES pcl_common.lib

pcl_io.lib

pcl_filters.lib

pcl_kdtree.lib

pcl_range_image.lib

pcl_visualization.lib)

 

# boost库 BOOST_LIBRARIES

set(BOOST_LIBRARIES libboost_system-vc100-mt-1_46_1.lib

libboost_filesystem-vc100-mt-1_46_1.lib

libboost_thread-vc100-mt-1_46_1.lib

libboost_date_time-vc100-mt-1_46_1.lib)

 

# vtk库 VTK_LIBRARIES

set(VTK_LIBRARIES vtkWidgets.lib

vtkHybrid.lib

vtkRendering.lib

vtkGraphics.lib

vtkverdict.lib

vtkImaging.lib

vtkIO.lib

vtkFiltering.lib

vtkCommon.lib

vtkDICOMParser.lib

vtkNetCDF_cxx.lib

vtkmetaio.lib

vtksqlite.lib

vtkpng.lib

vtktiff.lib

vtkzlib.lib

vtkjpeg.lib

vtkexpat.lib

vtksys.lib

vtkftgl.lib

vtkfreetype.lib

vtkexoIIc.lib

vtkNetCDF.lib

opengl32.lib)

 

# openni库 OPENNI_LIBRARIES

set(OPENNI_LIBRARIES openNI.lib)

 

# flann库 FLANN_LIBRARIES

set(FLANN_LIBRARIES flann_cpp_s.lib)

 

# 加入项目

# add_executable (项目名 cpp文件相对路径)

# target_link_libraries (项目名 库文件)

 

 # openni_viewer 项目,用来看kinect获得的三维数据

add_executable (openni_viewer src/openni_viewer.cpp)

target_link_libraries (openni_viewer ${BOOST_LIBRARIES}

${FLANN_LIBRARIES}

${OPENNI_LIBRARIES}

${PCL_LIBRARIES}

${VTK_LIBRARIES})

 

# pcd_write 项目,用来写pcd文件

add_executable (pcd_write src/pcd_write.cpp)

target_link_libraries (pcd_write ${BOOST_LIBRARIES}

${FLANN_LIBRARIES}

${PCL_LIBRARIES})

 

# pcd_viewer 项目,用来查看pcd文件

add_executable (pcd_viewer src/pcd_viewer.cpp)

target_link_libraries (pcd_viewer ${BOOST_LIBRARIES}

${FLANN_LIBRARIES}

${PCL_LIBRARIES}

${VTK_LIBRARIES})

 

 

 

至此,相信读者已经能在自己的电脑上看到kinect采集到的点云数据了!

Pcl是一个功能非常强悍的工具库,笔者对其的了解也仅是皮毛。Pcl的官网上提供了大量的tutorial源代码(在这里http://www.pointclouds.org/media/iros2011.html)。读者也可以到它的开发者论坛上和国外的玩家一起交流:http://www.pcl-users.org/

 

### PCL点云库的配置方法 #### 配置概述 PCL(Point Cloud Library)是一个开源项目,专注于提供高效易用的算法用于处理大规模三维点云数据。为了在开发环境中使用PCL,通常需要完成以下几个方面的设置:安装依赖项、配置编译器环境以及调整项目的链接选项。 --- #### Windows环境下配置PCL点云库的具体步骤 1. **下载并安装PCL及其依赖项** 下载适合操作系统的PCL版本,并解压至指定路径。例如,默认路径可以设为 `C:\Program Files\PCL x.x.x` 或其他自定义位置[^2]。此外,还需要确保已安装必要的第三方库,如 Boost、FLANN 和 VTK 等[^3]。 2. **配置系统环境变量** 将 PCL 的安装目录添加到系统的 PATH 环境变量中。这一步对于动态链接库的支持至关重要。如果未正确配置 PATH,则可能导致运行时找不到所需的 DLL 文件。 3. **修改 CMakeLists.txt 文件** 如果是在特定框架(如 CloudCompare)上进行二次开发,则可能需要编辑该项目中的两个或多个 `CMakeLists.txt` 文件来引入 PCL 库的相关参数[^1]。这些更改通常包括指定头文件路径和静态/动态库的位置。 4. **设置 Visual Studio 工程属性** 在 Visual Studio 中创建新工程或者打开已有解决方案之后,需执行如下几项操作: - 添加包含目录 (Include Directories): 这些应指向 PCL 及其子模块的 include 路径,比如: ```plaintext D:\PCL\PCL 1.8.1\include\pcl-1.8 D:\PCL\PCL 1.8.1\3rdParty\Boost\include\boost-1_74 D:\PCL\PCL 1.8.1\3rdParty\FLANN\include ``` - 设置附加库目录 (Library Directories): 此处应当填写 lib 子目录所在地址,例如: ```plaintext D:\PCL\PCL 1.8.1\lib D:\PCL\PCL 1.8.1\3rdParty\Boost\lib D:\PCL\PCL 1.8.1\3rdParty\FLANN\lib ``` - 输入额外依赖项 (Additional Dependencies): 对于 Release 版本,可加入类似以下条目;Debug 则替换后缀 `_release.dll` 为 `_debug.lib`。 ```plaintext pcl_common_release.lib pcl_io_release.lib pcl_kdtree_release.lib ``` 上述过程可以通过宏定义简化表达方式,例如利用 `$(PCL_ROOT)` 替代绝对路径[^4]。 5. **验证配置是否成功** 编写简单的测试程序以确认集成无误。下面展示了一个基本的例子用来加载点云文件并打印基本信息: ```cpp #include <iostream> #include <pcl/io/pcd_io.h> #include <pcl/point_types.h> int main() { pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>); // 加载 .pcd 文件 if (pcl::io::loadPCDFile<pcl::PointXYZ>("example.pcd", *cloud) == -1) { std::cerr << "无法读取 point cloud 数据!" << std::endl; return (-1); } std::cout << "点数:" << cloud->points.size() << std::endl; return 0; } ``` --- #### 常见问题排查 - 若遇到链接错误,请检查是否遗漏某些必要组件或是混用了不同架构下的二进制文件(x86 vs x64)。 - 当提示找不到符号时,重新审视 Additional Dependencies 是否涵盖了所有需要用到的功能模块。 - 动态连接失败往往是因为缺少对应的 runtime 支持包,此时建议切换成 static linking 模型再试一次。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值