PCL 1.60 +windows+vs2010 安裝與配置

PCL簡介html

  PCLPoint Cloud Library)是在吸取了前人點雲相關研究基礎上創建起來的大型跨平臺開源C++編程庫,它實現了大量點雲相關的通用算法和高效數據結構,涉及到點雲獲取、濾波、分割、配準、檢索、特徵提取、識別、追蹤、曲面重建、可視化等。支持多種操做系統平臺,可在WindowsLinuxAndroidMac OS X、部分嵌入式實時系統上運行。若是說OpenCV2D信息獲取與處理的結晶,那麼PCL就在3D信息獲取與處理上具備同等地位,PCLBSD受權方式,能夠免費進行商業和學術應用。ios

最近剛接觸PCL,發現用到PCL的人仍是比較少,可供學習的資料也很少,因此,我想從頭開始學習,並記錄下學習的過程。若是有興趣一塊兒學習的同窗能夠加我微信號zcs9602,咱們一塊兒交流學習。git

學習資源:github

PCL 1.8.0 比較全的安裝包及安裝步驟:http://unanancyowen.com/en/pcl18/算法

PCL 相關資料彙總:https://github.com/neilgu00365/Survey-for-SfMMissionsql

PCL 中國點雲庫:http://www.pclcn.org/編程

 

環境:windows+vs2010windows

若是你沒有vs2010我給你分享一個安裝包連接:http://pan.baidu.com/s/1pL3I0dH 密碼:a53o微信

1、下載數據結構

我用的是PCL 1.6.0 All-In-One Installer,Windows MSVC 2010 (32bit),因此,下面是以這個版本爲主。其實,只要下載PCL-1.6.0-AllInOne-msvc2010-win32.exeOpenNI 1.5.4 (patched)Sensor 5.1.0 (patched)三個文件就能夠了,PCL-1.6.0-AllInOne-msvc2010-win32.exe內部已經包含了所有的依賴庫,安裝的過程當中,OpenNI會安裝不上,因此要單獨下載,其它的依賴庫均可以不用下載。

2、安裝

分別安裝

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

二、OpenNI-Win32-1.5.4-Dev.msi

三、Sensor-Win-OpenSource32-5.1.0.msi

注意:你要編譯的是Win32Win64的版本要區別開,PCL和依賴庫都統一用同一個版本的,不然運行的時候會報錯。

3、配置

 

一、配置包含路徑

PCL安裝路徑下的3rdParty目錄下的include添加進去,另外OpenNI單獨安裝的路徑也添加進去,還有PCL安裝路徑下的Include\pcl-1.6也添加進去。

 

二、配置庫路徑

PCL安裝路徑下的3rdParty目錄下的lib添加進去,另外OpenNI單獨安裝的路徑也添加進去,還有PCL安裝路徑下的lib也添加進去。

 

三、配置輸入庫文件

添加下列文件名

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

 

 

4、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 (0, 0, 0);
    pcl::PointXYZ o;
    o.x = 1.0;
    o.y = 0;
    o.z = 0;
    viewer.addSphere (o, 0.25, "sphere", 0);
    std::cout << "i only run once" << std::endl;

}

void viewerPsycho (pcl::visualization::PCLVisualizer& viewer)
{
    static unsigned count = 0;
    std::stringstream ss;
    ss << "Once per viewer loop: " << count++;
    viewer.removeShape ("text", 0);
    viewer.addText (ss.str(), 200, 300, "text", 0);

    //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 0;
}

以上效果圖是用realsenseSR300獲取到我桌面的點雲。

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

5、總結分享

一、pcd讀取有點慢,聽說pcd數據以有序點雲的方式保存會好一點,可是沒我試了沒看出來能快多少,這個有待研究。

二、SR300直接獲取的深度圖像和RGB圖像座標上有誤差,這個考慮下怎麼作對齊。

三、若是工程配置上SR300SDKopencv,咱們就不須要在另外一個工程先保存pcd文件再讀取,中間就能夠省了不少步驟。

四、PCL的學習資料仍是不多,目前據說比較好也就只有《點雲庫PCL學習教程》,我也買了一本,慢慢學吧。

 公衆號奉上~歡迎來搞!

相關文章
相關標籤/搜索