PCL 1.60 +windows+vs2010 安装与配置
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 安装与配置的更多相关文章
- opencv学习(1.2) - Windows 10 安装OpenCV &配置VS 2015
windows 10 安装OpenCV&配置VS 2015 环境 系统:Windows 10 OpenCV版本:3.4.1 开发IDE:VS2015 社区版 下载安装 下载OpenCV 3.4 ...
- windows下安装和配置mongoDB
上次在mac下安装和配置了mongodb,这次在windows下也尝试安装和配置mongodb. 1.首先下载mongodb压缩包,下载后解压到D盘或E盘.如下: 2.配置环境变量:桌面—计算机右键— ...
- PHP学习之-Mongodb在Windows下安装及配置
Mongodb在Windows下安装及配置 1.下载 下载地址:http://www.mongodb.org/ 建议下载zip版本. 2.安装 下载windows版本安装就和普通的软件一样,直接下一步 ...
- PHP 1:在Windows上安装和配置PHP,Apache和My SQL
原文:PHP 1:在Windows上安装和配置PHP,Apache和My SQL 如果你Google一把类似的主题,你会发现相关的文章可以塞满你的硬盘.在这里之所以把它再次拿出来,目的是想记录我作为一 ...
- windows下安装和配置redis
1.windows下安装和配置redis 1.1 下载: 官网(linux下载地址):https://redis.io/ Windows系统下载地址:https://github.com/MSOpen ...
- windows下安装和配置多个版本的JDK
https://jingyan.baidu.com/article/47a29f2474ba55c015239957.html 如何在windows下安装和配置多个版本的jdk,本文将带你在windo ...
- 网络基础 Windows下安装和配置net-snmp 代理
Windows 下安装和配置net-snmp 代理[摘录] by:授客 QQ:1033553122 A. 安装 1. 安装前准备 ActivePerl-5.10.0.1004-MSWin ...
- 基于svnserve的SVN服务器(windows下安装与配置)
基于svnserve的SVN服务器(windows下安装与配置) 基于svnserve的SVN服务器(windows下安装与配置)关键字: svn 安装SVNserve 从http://subvers ...
- CentOS 6.5系统使用yum方式安装LAMP环境和phpMyAdmin,mysql8.0.1/mysql5.7.22+centos7,windows mysql安装、配置
介绍如何在CentOs6.2下面使用YUM配置安装LAMP环境,一些兄弟也很喜欢使用编译的安装方法,个人觉得如果不是对服务器做定制,用yum安装稳定简单,何必去download&make&am ...
随机推荐
- Python循环列表删除元素问题
有人会遇到这种问题,遍历列表,想删除列表中的某几个元素,执行后发现有些并没有删除到, 比如以下代码 a=[1,2,3,4,5,6]print(a) for i in a: if i==3 or i== ...
- YYHS-NOIP2017Training0921-逆光
题目描述 有一束光/那瞬间/是什么痛得刺眼/你的视线是谅解/为什么舍不得熄灭/我逆着光却看见/那是泪光/那力量/我不想再去抵挡/面对希望/逆着光/感觉爱存在的地方/一直就在我身旁 Descriptio ...
- EntityFramework 6.x多个上下文迁移实现分布式事务
前言 自从项目上了.NET Core平台用上了EntityFramework Core就再没碰过EntityFramework 6.x版本,目前而言EntityFramework 6.x是用的最多,无 ...
- java基础解析系列(六)---深入注解原理及使用
java基础解析系列(六)---注解原理及使用 java基础解析系列(一)---String.StringBuffer.StringBuilder java基础解析系列(二)---Integer ja ...
- 西邮linux兴趣小组2014纳新免试题(一)
[第一关] 题目 0101001001100001011100100010000100011010000001110000000011001111100100000111001100000000000 ...
- IOS SDWebImage实现基本原理详解(转载)
1)当我门需要获取网络图片的时候,我们首先需要的便是URl没有URl什么都没有,获得URL后我们SDWebImage实现的并不是直接去请求网路,而是检查图片缓存中有没有和URl相关的图片,如果有则直接 ...
- 初识Hibernate之环境搭建
相信所有做后端的程序员同行们,没有不知道Hibernate大名的.这是一个经典的轻量级Java EE持久层的解决方案,它使得我们程序员能以面向对象的思维操作传统的关系型数据库,这也是其存在的 ...
- RG_5
必须发博纪念经过昨天的开车, 作业本终于做完啦!!! 可以认真的刷题了.
- Dubbo与Zookeeper、SpringMVC整合和使用
作为dubbo框架初学者,能让框架跑起来非常不容易,非常感谢网上诸多大神提供的文章,本人参考文章地址是:https://my.oschina.net/xshuai/blog/891281 不过别人的记 ...
- 利用python多线程实现多个客户端与单个服务端的远程ssh
本次实验设计两个方面的代码,第一个是客户端,代码如下: import os from socket import * c = socket(AF_INET,SOCK_STREAM) c.connect ...