最近由於工作需要處理相關點雲數據,用於處理三維分析重建。三維點雲數據處理技術包括以下幾個方面:點雲濾波(數據預處理)、點雲關鍵點、特徵和特徵描述、點雲配準、 點雲分割與分類、SLAM圖優化、目標識別檢索、變化檢測、 三維重建、點雲數據管理等,相關的算法非常複雜。前期了解到網上有開源的點雲處理庫Point Cloud Library (PCL),可以用於2D/3D圖像和點雲處理,PCL基於BSD開源協議,可以免費用於商業和研究用途。
Point Cloud Library (PCL)庫基於C++語言開發,前期同事下載了點雲庫,但是編譯一直沒通過,本著簡單的原則看看有沒有其他語言版本的,搜索github發現確實有其他語言的移植版本,如pclpy、pcl.py、pcl-java、PclSharp(c#) 測試過後發現均不太理想(移植不太完整/示例缺乏/運行報錯)
所以還是老老實實使用PCL吧,首先我們從github點雲庫PointCloudLibrary/pcl/releases 根據自己作業系統版本下載最新的PCL安裝文件:PCL-1.9.1-AllInOne-msvc2017-win64.exe、pcl-1.9.1-pdb-msvc2017-win64.zip。首先安裝AllInOne-msvc2017,安裝過程很簡單直接下一步即可,安裝過程中會彈出另外OpenNI的安裝界面,建議安裝在\3rdParty\OpenNI2目錄下,當然安裝在其他目錄也是可以的。安裝完畢後會自動創建環境變量,如果提示環境變量創建失敗,則需要自己添加環境變量(總共8個),添加的環境變量如下圖所示:
\PCL 1.9.1\3rdParty\OpenNI2\Lib
\PCL 1.9.1\3rdParty\OpenNI2\Redist
\PCL 1.9.1\3rdParty\OpenNI2\Tools
\PCL 1.9.1\bin\PCL 1.9.1\3rdParty\Boost\lib
\PCL 1.9.1\3rdParty\FLANN\bin
\PCL 1.9.1\3rdParty\Qhull\bin
\PCL 1.9.1\3rdParty\VTK\bin
安裝完畢,環境變量確認無誤後,解壓pcl-1.9.1-pdb-msvc2017-win64.zip,將解壓得到的pdb文件複製到PCL安裝目錄\PCL 1.9.0\bin
打開VS2017/19新建C++空項目,我們在配置管理器裡面新建配置,取名PCL1.9.1X64,平臺選擇X64 ,然後打開屬性管理器選擇我們剛才新建的PCL1.9.1X64,點擊小扳手圖標,對編譯選項進行一些配置。
通用屬性->VC++目錄->包含目錄增加以下項:D:\Program Files\PCL 1.9.1\include\pcl-1.9
D:\Program Files\PCL 1.9.1\3rdParty\Boost\include\boost-1_68
D:\Program Files\PCL 1.9.1\3rdParty\Eigen\eigen3
D:\Program Files\PCL 1.9.1\3rdParty\FLANN\include
D:\Program Files\PCL 1.9.1\3rdParty\Qhull\include
D:\Program Files\PCL 1.9.1\3rdParty\OpenNI2\Include
D:\Program Files\PCL 1.9.1\3rdParty\VTK\include\vtk-8.1
通用屬性->VC++目錄->庫目錄,增加以下項:D:\Program Files\PCL 1.9.1\lib
D:\Program Files\PCL 1.9.1\3rdParty\Boost\lib
D:\Program Files\PCL 1.9.1\3rdParty\FLANN\lib
D:\Program Files\PCL 1.9.1\3rdParty\OpenNI2\Lib
D:\Program Files\PCL 1.9.1\3rdParty\Qhull\lib
D:\Program Files\PCL 1.9.1\3rdParty\VTK\lib
C/C++->預處理器->預處理器定義中添加:
_CRT_SECURE_NO_WARNINGS
_SCL_SECURE_NO_WARNINGS
_SILENCE_FPOS_SEEKPOS_DEPRECATION_WARNING
用於去除編譯警告
C/C++->所有選項->SDL檢查改為否
通用屬性->連結器->輸入->附加的依賴項,主要是以下2個目錄下的lib文件:
PCL1.9.0\PCL 1.9.0\3rdParty\VTK\lib
PCL 1.9.1\lib(只添加_release.lib結尾的lib)
然後百度搜索一個實例,發現正常編譯運行,運行這個三角化示例如果編譯提示:編譯遇到pop_t找不到標誌符的話,我們修改dist.h文件將typedef unsigned long long pop_t語句放置到#if __GNUC__之前即可。