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、配置输入库文件

添加下列文件名

opengl32.lib

pcl_apps_debug.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_octree_debug.lib

pcl_registration_debug.lib

pcl_sample_consensus_debug.lib

pcl_search_debug.lib

pcl_segmentation_debug.lib

pcl_surface_debug.lib

pcl_tracking_debug.lib

pcl_visualization_debug.lib

flann_cpp_s-gd.lib

boost_chrono-vc100-mt-gd-1_49.lib

boost_date_time-vc100-mt-gd-1_47.lib

boost_date_time-vc100-mt-gd-1_49.lib

boost_filesystem-vc100-mt-gd-1_47.lib

boost_filesystem-vc100-mt-gd-1_49.lib

boost_graph-vc100-mt-gd-1_49.lib

boost_graph_parallel-vc100-mt-gd-1_49.lib

boost_iostreams-vc100-mt-gd-1_47.lib

boost_iostreams-vc100-mt-gd-1_49.lib

boost_locale-vc100-mt-gd-1_49.lib

boost_math_c99-vc100-mt-gd-1_49.lib

boost_math_c99f-vc100-mt-gd-1_49.lib

boost_math_tr1-vc100-mt-gd-1_49.lib

boost_math_tr1f-vc100-mt-gd-1_49.lib

boost_mpi-vc100-mt-gd-1_49.lib

boost_prg_exec_monitor-vc100-mt-gd-1_49.lib

boost_program_options-vc100-mt-gd-1_49.lib

boost_random-vc100-mt-gd-1_49.lib

boost_regex-vc100-mt-gd-1_49.lib

boost_serialization-vc100-mt-gd-1_49.lib

boost_signals-vc100-mt-gd-1_49.lib

boost_system-vc100-mt-gd-1_47.lib

boost_system-vc100-mt-gd-1_49.lib

boost_thread-vc100-mt-gd-1_47.lib

boost_thread-vc100-mt-gd-1_49.lib

boost_timer-vc100-mt-gd-1_49.lib

boost_unit_test_framework-vc100-mt-gd-1_49.lib

boost_wave-vc100-mt-gd-1_49.lib

boost_wserialization-vc100-mt-gd-1_49.lib

libboost_chrono-vc100-mt-gd-1_49.lib

libboost_date_time-vc100-mt-gd-1_47.lib

libboost_date_time-vc100-mt-gd-1_49.lib

libboost_filesystem-vc100-mt-gd-1_47.lib

libboost_filesystem-vc100-mt-gd-1_49.lib

libboost_graph_parallel-vc100-mt-gd-1_49.lib

libboost_iostreams-vc100-mt-gd-1_47.lib

libboost_iostreams-vc100-mt-gd-1_49.lib

libboost_locale-vc100-mt-gd-1_49.lib

libboost_math_c99-vc100-mt-gd-1_49.lib

libboost_math_c99f-vc100-mt-gd-1_49.lib

libboost_math_tr1-vc100-mt-gd-1_49.lib

libboost_math_tr1f-vc100-mt-gd-1_49.lib

libboost_mpi-vc100-mt-gd-1_49.lib

libboost_prg_exec_monitor-vc100-mt-gd-1_49.lib

libboost_program_options-vc100-mt-gd-1_49.lib

libboost_random-vc100-mt-gd-1_49.lib

libboost_regex-vc100-mt-gd-1_49.lib

libboost_serialization-vc100-mt-gd-1_49.lib

libboost_signals-vc100-mt-gd-1_49.lib

libboost_system-vc100-mt-gd-1_47.lib

libboost_system-vc100-mt-gd-1_49.lib

libboost_test_exec_monitor-vc100-mt-gd-1_49.lib

libboost_thread-vc100-mt-gd-1_47.lib

libboost_thread-vc100-mt-gd-1_49.lib

libboost_timer-vc100-mt-gd-1_49.lib

libboost_unit_test_framework-vc100-mt-gd-1_49.lib

libboost_wave-vc100-mt-gd-1_49.lib

libboost_wserialization-vc100-mt-gd-1_49.lib

vtkalglib-gd.lib

vtkCharts-gd.lib

vtkCommon-gd.lib

vtkDICOMParser-gd.lib

vtkexoIIc-gd.lib

vtkexpat-gd.lib

vtkFiltering-gd.lib

vtkfreetype-gd.lib

vtkftgl-gd.lib

vtkGenericFiltering-gd.lib

vtkGeovis-gd.lib

vtkGraphics-gd.lib

vtkhdf5-gd.lib

vtkHybrid-gd.lib

vtkImaging-gd.lib

vtkInfovis-gd.lib

vtkIO-gd.lib

vtkjpeg-gd.lib

vtklibxml2-gd.lib

vtkmetaio-gd.lib

vtkNetCDF-gd.lib

vtkNetCDF_cxx-gd.lib

vtkpng-gd.lib

vtkproj4-gd.lib

vtkRendering-gd.lib

vtksqlite-gd.lib

vtksys-gd.lib

vtktiff-gd.lib

vtkverdict-gd.lib

vtkViews-gd.lib

vtkVolumeRendering-gd.lib

vtkWidgets-gd.lib

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

例程:

#include <pcl/visualization/cloud_viewer.h>
#include <iostream>
#include <pcl/io/io.h>
#include <pcl/io/pcd_io.h> int user_data; void viewerOneOff (pcl::visualization::PCLVisualizer& viewer)
{
viewer.setBackgroundColor (, , );
pcl::PointXYZ o;
o.x = 1.0;
o.y = ;
o.z = ;
viewer.addSphere (o, 0.25, "sphere", );
std::cout << "i only run once" << std::endl; } void viewerPsycho (pcl::visualization::PCLVisualizer& viewer)
{
static unsigned count = ;
std::stringstream ss;
ss << "Once per viewer loop: " << count++;
viewer.removeShape ("text", );
viewer.addText (ss.str(), , , "text", ); //FIXME: possible race condition here:
user_data++;
} int main ()
{
pcl::PointCloud<pcl::PointXYZRGBA>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZRGBA>);
pcl::io::loadPCDFile ("my_point_cloud.pcd", *cloud); pcl::visualization::CloudViewer viewer("Cloud Viewer"); //blocks until the cloud is actually rendered
viewer.showCloud(cloud); //use the following functions to get access to the underlying more advanced/powerful
//PCLVisualizer //This will only get called once
viewer.runOnVisualizationThreadOnce (viewerOneOff); //This will get called once per visualization iteration
viewer.runOnVisualizationThread (viewerPsycho);
while (!viewer.wasStopped ())
{
//you can also do cool processing here
//FIXME: Note that this is running in a separate thread from viewerPsycho
//and you should guard against race conditions yourself...
user_data++;
}
return ;
}

以上效果图是用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. Android 之内容提供者 内容解析者 内容观察者

    contentProvider:ContentProvider在Android中的作用是对外提供数据,除了可以为所在应用提供数据外,还可以共享数据给其他应用,这是Android中解决应用之间数据共享的 ...

  2. mybatis快速入门(五)

    今天写写user表和orders表的mybatis的高级映射,一对一映射和一对多映射 1.创建一个orders.java文件 1.1一对一映射,一条订单对应一个用户 package cn.my.myb ...

  3. 阿里云服务器解决mysql远程连接失败问题

    嗯,自己买了个阿里云的学生机服务器,奈何装了mysql以后一直不能连接,也是够笨的. 记录一下自己遇到的问题. 当然了,首先需要在阿里云安全组开放3306端口,第一次玩儿云服务器差点把我搞坏了.... ...

  4. MySQL数据备份之mysqldump使用(转)

    mysqldump常用于MySQL数据库逻辑备份. 1.各种用法说明 A. 最简单的用法: mysqldump -uroot -pPassword [database name] > [dump ...

  5. 关于JetBrains CLion 激活 (CLion License Activation)的解决办法,带hosts详细修改

    CLion版本号:JetBrains CLion 2017.2.1 第一行选择Activite,第二行Activate license with:选择Activation code. 这个时候里面的代 ...

  6. I/O输入输出流

    I/O(输入/输出) 在变量.数组和对象中存储的数据是暂时存在的,程序结束后它们就会消失.为了能够永久地保存创建的数据,需要将其保存在磁盘文件中,这样可以在其他程序中使用它们. Java的I/O技术可 ...

  7. 详细分析apache httpd反向代理的用法

    html { font-family: sans-serif } body { margin: 0 } article,aside,details,figcaption,figure,footer,h ...

  8. 易语言关于使用CURL,网页_访问,网页_访问S,网页_访问_对象,鱼刺(winHttpW)发送Get性能测试

    易语言关于使用 CURL,网页_访问,网页_访问S,网页_访问_对象,鱼刺(winHttpW)发送Get性能测试 测试模块情况: |-精易模块5.8  |-鱼刺类Http  |-libCURL +++ ...

  9. Admob - Google广告接入

    前言 现在免费小游戏及应用的主要收入渠道就是通过接入广告.而Google的Admob适用于全球范围内的广告接入,文档方面及后台管理也是较为完善,接入还是比较便捷的. 不过Google目前还在墙外,虽然 ...

  10. linux_base_commond_two

    1.linux privilege commond a.throught ll commond  can get follow picture d  directory    -  file   l ...