PCL简介

  PCL(Point Cloud Library)是在吸收了前人点云相关研究基础上建立起来的大型跨平台开源C++编程库,它实现了大量点云相关的通用算法和高效数据结构,涉及到点云获取、滤波、分割、配准、检索、特征提取、识别、追踪、曲面重建、可视化等。支持多种操作系统平台,可在Windows、Linux、Android、Mac OS X、部分嵌入式实时系统上运行。如果说OpenCV是2D信息获取与处理的结晶,那么PCL就在3D信息获取与处理上具有同等地位,PCL是BSD授权方式,可以免费进行商业和学术应用。

最近刚接触PCL,发现用到PCL的人还是比较少,可供学习的资料也不多,所以,我想从头开始学习,并记录下学习的过程。如果有兴趣一起学习的同学可以加我微信号zcs9602,我们一起交流学习。

学习资源:

PCL 1.8.0 比较全的安装包及安装步骤:http://unanancyowen.com/en/pcl18/

PCL 相关资料汇总:https://github.com/neilgu00365/Survey-for-SfMMission

PCL 中国点云库:http://www.pclcn.org/

 

环境:windows+vs2010

如果你没有vs2010我给你分享一个安装包链接:http://pan.baidu.com/s/1pL3I0dH 密码:a53o

一、下载

我用的是PCL 1.6.0 All-In-One Installer,Windows MSVC 2010 (32bit),所以,下面是以这个版本为主。其实,只要下载PCL-1.6.0-AllInOne-msvc2010-win32.exe、OpenNI 1.5.4 (patched)Sensor 5.1.0 (patched)三个文件就可以了,PCL-1.6.0-AllInOne-msvc2010-win32.exe内部已经包含了全部的依赖库,安装的过程中,OpenNI会安装不上,所以要单独下载,其它的依赖库都可以不用下载。

二、安装

分别安装

1、PCL-1.6.0-AllInOne-msvc2010-win32.exe

2、OpenNI-Win32-1.5.4-Dev.msi

3、Sensor-Win-OpenSource32-5.1.0.msi

注意:你要编译的是Win32和Win64的版本要区别开,PCL和依赖库都统一用同一个版本的,否则运行的时候会报错。

三、配置

1、配置包含路径

将PCL安装路径下的3rdParty目录下的include添加进去,另外OpenNI单独安装的路径也添加进去,还有PCL安装路径下的Include\pcl-1.6也添加进去。

2、配置库路径

将PCL安装路径下的3rdParty目录下的lib添加进去,另外OpenNI单独安装的路径也添加进去,还有PCL安装路径下的lib也添加进去。

3、配置输入库文件

添加下列文件名

  1. opengl32.lib
  2.  
  3. pcl_apps_debug.lib
  4.  
  5. pcl_common_debug.lib
  6.  
  7. pcl_features_debug.lib
  8.  
  9. pcl_filters_debug.lib
  10.  
  11. pcl_io_debug.lib
  12.  
  13. pcl_io_ply_debug.lib
  14.  
  15. pcl_kdtree_debug.lib
  16.  
  17. pcl_keypoints_debug.lib
  18.  
  19. pcl_octree_debug.lib
  20.  
  21. pcl_registration_debug.lib
  22.  
  23. pcl_sample_consensus_debug.lib
  24.  
  25. pcl_search_debug.lib
  26.  
  27. pcl_segmentation_debug.lib
  28.  
  29. pcl_surface_debug.lib
  30.  
  31. pcl_tracking_debug.lib
  32.  
  33. pcl_visualization_debug.lib
  34.  
  35. flann_cpp_s-gd.lib
  36.  
  37. boost_chrono-vc100-mt-gd-1_49.lib
  38.  
  39. boost_date_time-vc100-mt-gd-1_47.lib
  40.  
  41. boost_date_time-vc100-mt-gd-1_49.lib
  42.  
  43. boost_filesystem-vc100-mt-gd-1_47.lib
  44.  
  45. boost_filesystem-vc100-mt-gd-1_49.lib
  46.  
  47. boost_graph-vc100-mt-gd-1_49.lib
  48.  
  49. boost_graph_parallel-vc100-mt-gd-1_49.lib
  50.  
  51. boost_iostreams-vc100-mt-gd-1_47.lib
  52.  
  53. boost_iostreams-vc100-mt-gd-1_49.lib
  54.  
  55. boost_locale-vc100-mt-gd-1_49.lib
  56.  
  57. boost_math_c99-vc100-mt-gd-1_49.lib
  58.  
  59. boost_math_c99f-vc100-mt-gd-1_49.lib
  60.  
  61. boost_math_tr1-vc100-mt-gd-1_49.lib
  62.  
  63. boost_math_tr1f-vc100-mt-gd-1_49.lib
  64.  
  65. boost_mpi-vc100-mt-gd-1_49.lib
  66.  
  67. boost_prg_exec_monitor-vc100-mt-gd-1_49.lib
  68.  
  69. boost_program_options-vc100-mt-gd-1_49.lib
  70.  
  71. boost_random-vc100-mt-gd-1_49.lib
  72.  
  73. boost_regex-vc100-mt-gd-1_49.lib
  74.  
  75. boost_serialization-vc100-mt-gd-1_49.lib
  76.  
  77. boost_signals-vc100-mt-gd-1_49.lib
  78.  
  79. boost_system-vc100-mt-gd-1_47.lib
  80.  
  81. boost_system-vc100-mt-gd-1_49.lib
  82.  
  83. boost_thread-vc100-mt-gd-1_47.lib
  84.  
  85. boost_thread-vc100-mt-gd-1_49.lib
  86.  
  87. boost_timer-vc100-mt-gd-1_49.lib
  88.  
  89. boost_unit_test_framework-vc100-mt-gd-1_49.lib
  90.  
  91. boost_wave-vc100-mt-gd-1_49.lib
  92.  
  93. boost_wserialization-vc100-mt-gd-1_49.lib
  94.  
  95. libboost_chrono-vc100-mt-gd-1_49.lib
  96.  
  97. libboost_date_time-vc100-mt-gd-1_47.lib
  98.  
  99. libboost_date_time-vc100-mt-gd-1_49.lib
  100.  
  101. libboost_filesystem-vc100-mt-gd-1_47.lib
  102.  
  103. libboost_filesystem-vc100-mt-gd-1_49.lib
  104.  
  105. libboost_graph_parallel-vc100-mt-gd-1_49.lib
  106.  
  107. libboost_iostreams-vc100-mt-gd-1_47.lib
  108.  
  109. libboost_iostreams-vc100-mt-gd-1_49.lib
  110.  
  111. libboost_locale-vc100-mt-gd-1_49.lib
  112.  
  113. libboost_math_c99-vc100-mt-gd-1_49.lib
  114.  
  115. libboost_math_c99f-vc100-mt-gd-1_49.lib
  116.  
  117. libboost_math_tr1-vc100-mt-gd-1_49.lib
  118.  
  119. libboost_math_tr1f-vc100-mt-gd-1_49.lib
  120.  
  121. libboost_mpi-vc100-mt-gd-1_49.lib
  122.  
  123. libboost_prg_exec_monitor-vc100-mt-gd-1_49.lib
  124.  
  125. libboost_program_options-vc100-mt-gd-1_49.lib
  126.  
  127. libboost_random-vc100-mt-gd-1_49.lib
  128.  
  129. libboost_regex-vc100-mt-gd-1_49.lib
  130.  
  131. libboost_serialization-vc100-mt-gd-1_49.lib
  132.  
  133. libboost_signals-vc100-mt-gd-1_49.lib
  134.  
  135. libboost_system-vc100-mt-gd-1_47.lib
  136.  
  137. libboost_system-vc100-mt-gd-1_49.lib
  138.  
  139. libboost_test_exec_monitor-vc100-mt-gd-1_49.lib
  140.  
  141. libboost_thread-vc100-mt-gd-1_47.lib
  142.  
  143. libboost_thread-vc100-mt-gd-1_49.lib
  144.  
  145. libboost_timer-vc100-mt-gd-1_49.lib
  146.  
  147. libboost_unit_test_framework-vc100-mt-gd-1_49.lib
  148.  
  149. libboost_wave-vc100-mt-gd-1_49.lib
  150.  
  151. libboost_wserialization-vc100-mt-gd-1_49.lib
  152.  
  153. vtkalglib-gd.lib
  154.  
  155. vtkCharts-gd.lib
  156.  
  157. vtkCommon-gd.lib
  158.  
  159. vtkDICOMParser-gd.lib
  160.  
  161. vtkexoIIc-gd.lib
  162.  
  163. vtkexpat-gd.lib
  164.  
  165. vtkFiltering-gd.lib
  166.  
  167. vtkfreetype-gd.lib
  168.  
  169. vtkftgl-gd.lib
  170.  
  171. vtkGenericFiltering-gd.lib
  172.  
  173. vtkGeovis-gd.lib
  174.  
  175. vtkGraphics-gd.lib
  176.  
  177. vtkhdf5-gd.lib
  178.  
  179. vtkHybrid-gd.lib
  180.  
  181. vtkImaging-gd.lib
  182.  
  183. vtkInfovis-gd.lib
  184.  
  185. vtkIO-gd.lib
  186.  
  187. vtkjpeg-gd.lib
  188.  
  189. vtklibxml2-gd.lib
  190.  
  191. vtkmetaio-gd.lib
  192.  
  193. vtkNetCDF-gd.lib
  194.  
  195. vtkNetCDF_cxx-gd.lib
  196.  
  197. vtkpng-gd.lib
  198.  
  199. vtkproj4-gd.lib
  200.  
  201. vtkRendering-gd.lib
  202.  
  203. vtksqlite-gd.lib
  204.  
  205. vtksys-gd.lib
  206.  
  207. vtktiff-gd.lib
  208.  
  209. vtkverdict-gd.lib
  210.  
  211. vtkViews-gd.lib
  212.  
  213. vtkVolumeRendering-gd.lib
  214.  
  215. vtkWidgets-gd.lib
  216.  
  217. vtkzlib-gd.lib

文件有点多,这里可以有个比较快的方法:这里以vtk为例,

打开CMD->进入PCL的安装目录->进入3rdParty\VTK\lib\vtk-5.8目录->输入命令:dir /b *gd.lib -> list.txt

命令的意思是找出gd.lib结尾的文件并保存到list.txt文档里面。然后当前目录就会生成list.txt

四、Demo

例程:

  1. #include <pcl/visualization/cloud_viewer.h>
  2. #include <iostream>
  3. #include <pcl/io/io.h>
  4. #include <pcl/io/pcd_io.h>
  5.  
  6. int user_data;
  7.  
  8. void viewerOneOff (pcl::visualization::PCLVisualizer& viewer)
  9. {
  10. viewer.setBackgroundColor (, , );
  11. pcl::PointXYZ o;
  12. o.x = 1.0;
  13. o.y = ;
  14. o.z = ;
  15. viewer.addSphere (o, 0.25, "sphere", );
  16. std::cout << "i only run once" << std::endl;
  17.  
  18. }
  19.  
  20. void viewerPsycho (pcl::visualization::PCLVisualizer& viewer)
  21. {
  22. static unsigned count = ;
  23. std::stringstream ss;
  24. ss << "Once per viewer loop: " << count++;
  25. viewer.removeShape ("text", );
  26. viewer.addText (ss.str(), , , "text", );
  27.  
  28. //FIXME: possible race condition here:
  29. user_data++;
  30. }
  31.  
  32. int main ()
  33. {
  34. pcl::PointCloud<pcl::PointXYZRGBA>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZRGBA>);
  35. pcl::io::loadPCDFile ("my_point_cloud.pcd", *cloud);
  36.  
  37. pcl::visualization::CloudViewer viewer("Cloud Viewer");
  38.  
  39. //blocks until the cloud is actually rendered
  40. viewer.showCloud(cloud);
  41.  
  42. //use the following functions to get access to the underlying more advanced/powerful
  43. //PCLVisualizer
  44.  
  45. //This will only get called once
  46. viewer.runOnVisualizationThreadOnce (viewerOneOff);
  47.  
  48. //This will get called once per visualization iteration
  49. viewer.runOnVisualizationThread (viewerPsycho);
  50. while (!viewer.wasStopped ())
  51. {
  52. //you can also do cool processing here
  53. //FIXME: Note that this is running in a separate thread from viewerPsycho
  54. //and you should guard against race conditions yourself...
  55. user_data++;
  56. }
  57. return ;
  58. }

以上效果图是用realsense的SR300获取到我桌面的点云。

my_point_cloud.pcd 文件 链接:http://pan.baidu.com/s/1gfD2lF1 密码:cexi

五、总结分享

1、pcd读取有点慢,据说pcd数据以有序点云的方式保存会好一点,但是没我试了没看出来能快多少,这个有待研究。

2、SR300直接获取的深度图像和RGB图像坐标上有偏差,这个考虑下怎么做对齐。

3、如果工程配置上SR300的SDK和opencv,我们就不需要在另一个工程先保存pcd文件再读取,中间就可以省了很多步骤。

4、PCL的学习资料还是很少,目前听说比较好也就只有《点云库PCL学习教程》,我也买了一本,慢慢学吧。

公众号奉上~欢迎来搞!

PCL 1.60 +windows+vs2010 安装与配置的更多相关文章

  1. opencv学习(1.2) - Windows 10 安装OpenCV &配置VS 2015

    windows 10 安装OpenCV&配置VS 2015 环境 系统:Windows 10 OpenCV版本:3.4.1 开发IDE:VS2015 社区版 下载安装 下载OpenCV 3.4 ...

  2. windows下安装和配置mongoDB

    上次在mac下安装和配置了mongodb,这次在windows下也尝试安装和配置mongodb. 1.首先下载mongodb压缩包,下载后解压到D盘或E盘.如下: 2.配置环境变量:桌面—计算机右键— ...

  3. PHP学习之-Mongodb在Windows下安装及配置

    Mongodb在Windows下安装及配置 1.下载 下载地址:http://www.mongodb.org/ 建议下载zip版本. 2.安装 下载windows版本安装就和普通的软件一样,直接下一步 ...

  4. PHP 1:在Windows上安装和配置PHP,Apache和My SQL

    原文:PHP 1:在Windows上安装和配置PHP,Apache和My SQL 如果你Google一把类似的主题,你会发现相关的文章可以塞满你的硬盘.在这里之所以把它再次拿出来,目的是想记录我作为一 ...

  5. windows下安装和配置redis

    1.windows下安装和配置redis 1.1 下载: 官网(linux下载地址):https://redis.io/ Windows系统下载地址:https://github.com/MSOpen ...

  6. windows下安装和配置多个版本的JDK

    https://jingyan.baidu.com/article/47a29f2474ba55c015239957.html 如何在windows下安装和配置多个版本的jdk,本文将带你在windo ...

  7. 网络基础 Windows下安装和配置net-snmp 代理

    Windows 下安装和配置net-snmp 代理[摘录] by:授客 QQ:1033553122   A.   安装  1.   安装前准备 ActivePerl-5.10.0.1004-MSWin ...

  8. 基于svnserve的SVN服务器(windows下安装与配置)

    基于svnserve的SVN服务器(windows下安装与配置) 基于svnserve的SVN服务器(windows下安装与配置)关键字: svn 安装SVNserve 从http://subvers ...

  9. CentOS 6.5系统使用yum方式安装LAMP环境和phpMyAdmin,mysql8.0.1/mysql5.7.22+centos7,windows mysql安装、配置

    介绍如何在CentOs6.2下面使用YUM配置安装LAMP环境,一些兄弟也很喜欢使用编译的安装方法,个人觉得如果不是对服务器做定制,用yum安装稳定简单,何必去download&make&am ...

随机推荐

  1. Python循环列表删除元素问题

    有人会遇到这种问题,遍历列表,想删除列表中的某几个元素,执行后发现有些并没有删除到, 比如以下代码 a=[1,2,3,4,5,6]print(a) for i in a: if i==3 or i== ...

  2. YYHS-NOIP2017Training0921-逆光

    题目描述 有一束光/那瞬间/是什么痛得刺眼/你的视线是谅解/为什么舍不得熄灭/我逆着光却看见/那是泪光/那力量/我不想再去抵挡/面对希望/逆着光/感觉爱存在的地方/一直就在我身旁 Descriptio ...

  3. EntityFramework 6.x多个上下文迁移实现分布式事务

    前言 自从项目上了.NET Core平台用上了EntityFramework Core就再没碰过EntityFramework 6.x版本,目前而言EntityFramework 6.x是用的最多,无 ...

  4. java基础解析系列(六)---深入注解原理及使用

    java基础解析系列(六)---注解原理及使用 java基础解析系列(一)---String.StringBuffer.StringBuilder java基础解析系列(二)---Integer ja ...

  5. 西邮linux兴趣小组2014纳新免试题(一)

    [第一关] 题目 0101001001100001011100100010000100011010000001110000000011001111100100000111001100000000000 ...

  6. IOS SDWebImage实现基本原理详解(转载)

    1)当我门需要获取网络图片的时候,我们首先需要的便是URl没有URl什么都没有,获得URL后我们SDWebImage实现的并不是直接去请求网路,而是检查图片缓存中有没有和URl相关的图片,如果有则直接 ...

  7. 初识Hibernate之环境搭建

         相信所有做后端的程序员同行们,没有不知道Hibernate大名的.这是一个经典的轻量级Java EE持久层的解决方案,它使得我们程序员能以面向对象的思维操作传统的关系型数据库,这也是其存在的 ...

  8. RG_5

    必须发博纪念经过昨天的开车, 作业本终于做完啦!!! 可以认真的刷题了.

  9. Dubbo与Zookeeper、SpringMVC整合和使用

    作为dubbo框架初学者,能让框架跑起来非常不容易,非常感谢网上诸多大神提供的文章,本人参考文章地址是:https://my.oschina.net/xshuai/blog/891281 不过别人的记 ...

  10. 利用python多线程实现多个客户端与单个服务端的远程ssh

    本次实验设计两个方面的代码,第一个是客户端,代码如下: import os from socket import * c = socket(AF_INET,SOCK_STREAM) c.connect ...