一、前言
PCL(Point Cloud Library)是在吸收了前人点云相关研究基础上建立起来的大型跨平台开源C++编程库,也就是C++模板库。基于以下第三方库:Boost、Eigen、FLANN、VTK、CUDA、OpenNI、Qhull,它实现了大量点云相关的通用算法和高效数据结构,涉及到点云获取、滤波、分割、配准、检索、特征提取、识别、追踪、曲面重建、可视化等。支持多种操作系统平台,可在Windows、Linux、Android、Mac OS X、部分嵌入式实时系统上运行。如果说OpenCV是2D信息获取与处理的结晶,那么PCL就在3D信息获取与处理上具有同等地位,PCL是BSD授权方式,可以免费进行商业和学术应用[1]。
二、源码安装PCL点云库
PCL官方网站提供了命令行的安装方式,虽然相对方便(不知道下载会不会卡住),但是后续想看一下源码也是个麻烦事。如果涉及到后续开发的话最好还是进行源码安装,在github中直接搜索到的是master版本的pcl,在下载编译的时候总是出现一个错误:找不到“Eigen::Init”,在Eigen中确实也没有“Eigen::Init”,而是“Eigen::Matrixd::Iint”or"Eigen::Vectorxd::Iint",开始以为是Eigen版本的问题,换了几个版本的还是不行,浪费时间啊啊啊。其实我们应该下载的是release的版本,这才是我们需要的(Github还是用的少啊)。个人觉得master版本好像是最新的开发版本,可能存在一些Bug,release版本就相当于发行版,以后安装一些库的时候需要注意这个问题。源码安装PCL点云库,可以参考这位博主的博客,写得很好,在这里重复一遍。
1.安装相关依赖包
Pcl必须依赖的库:Boost, Eigen, FLANN, VTK可选:OpenNI2, Qhull:
编译PCL库需要下载并编译一系列的PCL依赖的第三方库:
1)boost,用于共享指针和线程操作,必需;
2)eigen,用于矩阵、向量等数据操作,必需;
3)flann,用于kd树模块中快速临近搜索,必需;
4)qhull,用于凹面或凸面的外包求解,可选;
5)qt,用于UI开发,可选;
6)openNI,用于与OpenNI兼容的设备获取点云,可选;
7)VTK(visualization ToolKit),在可视化模块中用于3D点云渲染和可视化,必需;
8)googletest,用于建立测试单元,可选;
9)MPI,用于集群上高性能计算,可选;
了解了这些地方库的功能后,在建立xcode下面的工程是可以进行参考添加相应的库及搜索路径[2]。
sudo apt-get install g++
sudo apt-get install cmake cmake-gui
sudo apt-get install doxygen
sudo apt-get install mpi-default-dev openmpi-bin openmpi-common
sudo apt-get install libflann1.8 libflann-dev
sudo apt-get install libeigen3-dev
sudo apt-get install libboost-all-dev
sudo apt-get install libvtk6-dev libvtk6.2 libvtk6.2-qt
sudo apt-get install 'libqhull*'
sudo apt-get install libusb-dev
sudo apt-get install libgtest-dev
sudo apt-get install git-core freeglut3-dev pkg-config
sudo apt-get install build-essential libxmu-dev libxi-dev
sudo apt-get install libusb-1.0-0-dev graphviz mono-complete
sudo apt-get install qt-sdk openjdk-9-jdk openjdk-9-jre
sudo apt-get install phonon-backend-gstreamer
sudo apt-get install phonon-backend-vlc
sudo apt-get install libopenni-dev libopenni2-dev
2.下载源码包和安装
源码地址:https://github.com/PointCloudLibrary/pcl/releases/tag/pcl-1.9.0
下载卡住换网络,再不行手机开热点,再不行换手机运营商的数据等等这些骚操作要熟,别问我怎么知道的。。。
将压缩包解压之后就是cmake常规操作:
cd pcl-pcl-1.9.1/
mkdir build
cd build/
cmake -DPCL_DIR=/usr/local/share/pcl-1.9 ..
make -j4
sudo make install
编译时如果遇到 warning: multi-line comment [-Wcomment] // a & b \\ ^,不必管它
最后代码就安装到了系统目录/usr/local下
3.QT调用PCL点云库
在pro文件中加入所包含的库以及路径[3]
INCLUDEPATH += /usr/include/eigen3
INCLUDEPATH += /usr/include/vtk-6.2
LIBS += /usr/lib/x86_64-linux-gnu/libvtk*.so
INCLUDEPATH += /usr/include/boost
LIBS += /usr/lib/x86_64-linux-gnu/libboost_*.so
INCLUDEPATH += /usr/local/include/pcl-1.9
LIBS += /usr/local/lib/libpcl_*.so
main.cpp中加入如下代码:
#include <pcl/visualization/cloud_viewer.h>
#include <pcl/io/io.h>
int main()
{
pcl::visualization::CloudViewer viewer("Cloud Viewer");
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>());
//正方体点云
for(int i=0; i<20; i++)
{
for(int j=0; j<20; j++)
{
for(int k = 0; k<20; k++)
{
cloud->push_back(pcl::PointXYZ((i-10)/1.0f, (j-10)/1.0f, (k-10)/1.0f));
}
}
}
viewer.showCloud(cloud);
while(!viewer.wasStopped());
return 0;
}
参考文献:
1.https://baike.baidu.com/item/PCL/19917263?fr=aladdin
2.https://blog.csdn.net/gflytu/article/details/46480797?locationNum=7
3.https://blog.csdn.net/hy2014x/article/details/100980326