PCL配置以及簡單的點雲顯示
從開始配置點雲加上前段時間的論文開題,已經花費了我快一個月的時間,都說萬事開頭難!是真的難,我甚至想過換方向~開個玩笑,雖然沒有對點雲瞭解多少,但感覺這個方向還是很有發展前途的。下面說一下我個人的點雲配置。
之前嘗試過VS的各種版本,VS2017、VS2015與PCL點雲庫各種版本的搭配,最後在VS2013和PCL1.8.0下搭建環境成功,在此期間看過網上各種的配置部落格,我都沒有成功過,問了一些搭建成功的學姐和學長們,他們都說和VS版本沒有關係,額,或許真的是要看人品吧,下面我介紹一下VS2013與PCL1.8.0的環境搭建過程。
這是一個微信公眾號,學弟推薦給我的,親測好用,下了MATLAB 2018以及各種軟體,推薦給大家。
裡面不僅有PCL的版本,還有很多相關程式碼,很全的,當然這是其他大神分享的。
在配置之前要說一下,要看對應的VS的版本,可以少走彎路,我下載的版本應該是32位的,所以安裝PCL的版本也應該是32位的,雖然電腦是64位的,但是一定要和VS的版本對應好!一定要!
下面開始緊張刺激的安裝配置環節啦!!!
STEP 1:安裝PCL-1.8.0-AllInOne-msvc2013-win32 安裝,一直點下一步就好,但一半的時候,會彈出安裝OPENNI的框框,把它安裝在PCL安裝目錄下3rdParty\OpenNI2裡,安裝成功後,把壓縮包PCL-1.8.0-pdb-msvc2013-win32解壓後放到PCL1.8.0檔案下的lib中。到這裡可以稍微開心一小下下!
STEP 2:配置電腦環境
電腦——屬性——高階系統設定——高階——環境變數
就是這樣,當我們安裝好PCL的時候,系統變數就會出現
是的,有的時候會驚訝的發現,並沒有這些,咋辦呢?自己新增吧!哈哈 ,咱不怕麻煩,只要是最後成功就可以了。
在Path中再手動新增變數,當然有的童鞋開啟不是這樣的方框框,一條一條的,他們是都擠在一行中,很難看!不容易新增,那是因為你變數的第一個是以%開頭的,不要問我咋知道,我也出現過,百度解決的,這裡很貼心的為大家考慮到了。
這四個就可以了,有的部落格上可能比這個多一點,你要是不放心可以都添上,沒啥關係。
STEP 3:VS中的專案工程屬性的配置
先新建專案,Win32控制檯應用程式(不要勾中安全開發生命週期SDL檢查),然後在屬性管理器中Debug|Win32中新建專案屬性表,自己取個名字,以後方面自己新增。
通用屬性下的VC++目錄——包含目錄新增以下(每個人前面的路徑不同,後面是一樣的,自己注意修改啊):
C:\Program Files (x86)\PCL 1.8.0\include\pcl-1.8
C:\Program Files (x86)\PCL 1.8.0\3rdParty\Boost\include\boost-1_59
C:\Program Files (x86)\PCL 1.8.0\3rdParty\Qhull\include
C:\Program Files (x86)\PCL 1.8.0\3rdParty\FLANN\include
C:\Program Files (x86)\PCL 1.8.0\3rdParty\VTK\include\vtk-7.0
C:\Program Files (x86)\PCL 1.8.0\3rdParty\Eigen\eigen3
庫目錄下新增:
C:\Program Files (x86)\PCL 1.8.0\3rdParty\VTK\lib
C:\Program Files (x86)\PCL 1.8.0\3rdParty\FLANN\lib
C:\Program Files (x86)\PCL 1.8.0\3rdParty\Qhull\lib
C:\Program Files (x86)\PCL 1.8.0\3rdParty\Boost\lib
C:\Program Files (x86)\PCL 1.8.0\lib
連結器——輸入——附加依賴項中新增:
pcl_apps_debug.lib
pcl_common_debug.lib
pcl_features_debug.lib
pcl_filters_debug.lib
pcl_io_ply_debug.lib
pcl_io_debug.lib
pcl_kdtree_debug.lib
pcl_keypoints_debug.lib
pcl_ml_debug.lib
pcl_octree_debug.lib
pcl_outofcore_debug.lib
pcl_people_debug.lib
pcl_recognition_debug.lib
pcl_registration_debug.lib
pcl_sample_consensus_debug.lib
pcl_search_debug.lib
pcl_segmentation_debug.lib
pcl_simulation_debug.lib
pcl_stereo_debug.lib
pcl_surface_debug.lib
pcl_tracking_debug.lib
pcl_visualization_debug.lib
libboost_atomic-vc120-mt-gd-1_59.lib
libboost_chrono-vc120-mt-gd-1_59.lib
libboost_container-vc120-mt-gd-1_59.lib
libboost_context-vc120-mt-gd-1_59.lib
libboost_coroutine-vc120-mt-gd-1_59.lib
libboost_date_time-vc120-mt-gd-1_59.lib
libboost_exception-vc120-mt-gd-1_59.lib
libboost_filesystem-vc120-mt-gd-1_59.lib
libboost_graph-vc120-mt-gd-1_59.lib
libboost_iostreams-vc120-mt-gd-1_59.lib
libboost_locale-vc120-mt-gd-1_59.lib
libboost_log-vc120-mt-gd-1_59.lib
libboost_log_setup-vc120-mt-gd-1_59.lib
libboost_math_c99-vc120-mt-gd-1_59.lib
libboost_math_c99f-vc120-mt-gd-1_59.lib
libboost_math_c99l-vc120-mt-gd-1_59.lib
libboost_math_tr1-vc120-mt-gd-1_59.lib
libboost_math_tr1f-vc120-mt-gd-1_59.lib
libboost_math_tr1l-vc120-mt-gd-1_59.lib
libboost_mpi-vc120-mt-gd-1_59.lib
libboost_prg_exec_monitor-vc120-mt-gd-1_59.lib
libboost_program_options-vc120-mt-gd-1_59.lib
libboost_random-vc120-mt-gd-1_59.lib
libboost_regex-vc120-mt-gd-1_59.lib
libboost_serialization-vc120-mt-gd-1_59.lib
libboost_signals-vc120-mt-gd-1_59.lib
libboost_system-vc120-mt-gd-1_59.lib
libboost_test_exec_monitor-vc120-mt-gd-1_59.lib
libboost_thread-vc120-mt-gd-1_59.lib
libboost_timer-vc120-mt-gd-1_59.lib
libboost_unit_test_framework-vc120-mt-gd-1_59.lib
libboost_wave-vc120-mt-gd-1_59.lib
libboost_wserialization-vc120-mt-gd-1_59.lib
flann-gd.lib
flann_cpp_s-gd.lib
flann_s-gd.lib
qhull-gd.lib
qhullcpp-gd.lib
qhullstatic-gd.lib
qhullstatic_r-gd.lib
qhull_p-gd.lib
qhull_r-gd.lib
vtkalglib-7.0-gd.lib
vtkChartsCore-7.0-gd.lib
vtkCommonColor-7.0-gd.lib
vtkCommonComputationalGeometry-7.0-gd.lib
vtkCommonCore-7.0-gd.lib
vtkCommonDataModel-7.0-gd.lib
vtkCommonExecutionModel-7.0-gd.lib
vtkCommonMath-7.0-gd.lib
vtkCommonMisc-7.0-gd.lib
vtkCommonSystem-7.0-gd.lib
vtkCommonTransforms-7.0-gd.lib
vtkDICOMParser-7.0-gd.lib
vtkDomainsChemistry-7.0-gd.lib
vtkDomainsChemistryOpenGL2-7.0-gd.lib
vtkexoIIc-7.0-gd.lib
vtkexpat-7.0-gd.lib
vtkFiltersAMR-7.0-gd.lib
vtkFiltersCore-7.0-gd.lib
vtkFiltersExtraction-7.0-gd.lib
vtkFiltersFlowPaths-7.0-gd.lib
vtkFiltersGeneral-7.0-gd.lib
vtkFiltersGeneric-7.0-gd.lib
vtkFiltersGeometry-7.0-gd.lib
vtkFiltersHybrid-7.0-gd.lib
vtkFiltersHyperTree-7.0-gd.lib
vtkFiltersImaging-7.0-gd.lib
vtkFiltersModeling-7.0-gd.lib
vtkFiltersParallel-7.0-gd.lib
vtkFiltersParallelImaging-7.0-gd.lib
vtkFiltersProgrammable-7.0-gd.lib
vtkFiltersSelection-7.0-gd.lib
vtkFiltersSMP-7.0-gd.lib
vtkFiltersSources-7.0-gd.lib
vtkFiltersStatistics-7.0-gd.lib
vtkFiltersTexture-7.0-gd.lib
vtkFiltersVerdict-7.0-gd.lib
vtkfreetype-7.0-gd.lib
vtkGeovisCore-7.0-gd.lib
vtkglew-7.0-gd.lib
vtkGUISupportQt-7.0-gd.lib
vtkGUISupportQtSQL-7.0-gd.lib
vtkhdf5-7.0-gd.lib
vtkhdf5_hl-7.0-gd.lib
vtkImagingColor-7.0-gd.lib
vtkImagingCore-7.0-gd.lib
vtkImagingFourier-7.0-gd.lib
vtkImagingGeneral-7.0-gd.lib
vtkImagingHybrid-7.0-gd.lib
vtkImagingMath-7.0-gd.lib
vtkImagingMorphological-7.0-gd.lib
vtkImagingSources-7.0-gd.lib
vtkImagingStatistics-7.0-gd.lib
vtkImagingStencil-7.0-gd.lib
vtkInfovisCore-7.0-gd.lib
vtkInfovisLayout-7.0-gd.lib
vtkInteractionImage-7.0-gd.lib
vtkInteractionStyle-7.0-gd.lib
vtkInteractionWidgets-7.0-gd.lib
vtkIOAMR-7.0-gd.lib
vtkIOCore-7.0-gd.lib
vtkIOEnSight-7.0-gd.lib
vtkIOExodus-7.0-gd.lib
vtkIOExport-7.0-gd.lib
vtkIOGeometry-7.0-gd.lib
vtkIOImage-7.0-gd.lib
vtkIOImport-7.0-gd.lib
vtkIOInfovis-7.0-gd.lib
vtkIOLegacy-7.0-gd.lib
vtkIOLSDyna-7.0-gd.lib
vtkIOMINC-7.0-gd.lib
vtkIOMovie-7.0-gd.lib
vtkIONetCDF-7.0-gd.lib
vtkIOParallel-7.0-gd.lib
vtkIOParallelXML-7.0-gd.lib
vtkIOPLY-7.0-gd.lib
vtkIOSQL-7.0-gd.lib
vtkIOVideo-7.0-gd.lib
vtkIOXML-7.0-gd.lib
vtkIOXMLParser-7.0-gd.lib
vtkjpeg-7.0-gd.lib
vtkjsoncpp-7.0-gd.lib
vtklibxml2-7.0-gd.lib
vtkmetaio-7.0-gd.lib
vtkNetCDF-7.0-gd.lib
vtkNetCDF_cxx-7.0-gd.lib
vtkoggtheora-7.0-gd.lib
vtkParallelCore-7.0-gd.lib
vtkpng-7.0-gd.lib
vtkproj4-7.0-gd.lib
vtkRenderingAnnotation-7.0-gd.lib
vtkRenderingContext2D-7.0-gd.lib
vtkRenderingContextOpenGL2-7.0-gd.lib
vtkRenderingCore-7.0-gd.lib
vtkRenderingFreeType-7.0-gd.lib
vtkRenderingImage-7.0-gd.lib
vtkRenderingLabel-7.0-gd.lib
vtkRenderingLOD-7.0-gd.lib
vtkRenderingOpenGL2-7.0-gd.lib
vtkRenderingQt-7.0-gd.lib
vtkRenderingVolume-7.0-gd.lib
vtkRenderingVolumeOpenGL2-7.0-gd.lib
vtksqlite-7.0-gd.lib
vtksys-7.0-gd.lib
vtktiff-7.0-gd.lib
vtkverdict-7.0-gd.lib
vtkViewsContext2D-7.0-gd.lib
vtkViewsCore-7.0-gd.lib
vtkViewsInfovis-7.0-gd.lib
vtkViewsQt-7.0-gd.lib
vtkzlib-7.0-gd.lib
在最後編譯的時候,VS中可能會出現找不到以上的某一個lib檔案,那麼解決的辦法就是從附加依賴項把他刪去就好了,我出現過這樣的錯誤。
下面就是最後也是最重要的一步了,除錯程式!
//新增標頭檔案
#include <iostream>
#include <pcl/io/io.h>
#include <pcl/io/pcd_io.h>
#include <pcl/visualization/cloud_viewer.h>
// typedef pcl::PointXYZ PointT;
typedef pcl::PointXYZRGBA PointT;
void viewerOneOff(pcl::visualization::PCLVisualizer& viewer)
{
// set background to black (R = 0, G = 0, B = 0)
viewer.setBackgroundColor(0, 0, 0);
}
void viewerPsycho(pcl::visualization::PCLVisualizer& viewer)
{
// you can add something here, ex: add text in viewer
}
//int main(int argc, char *argv[])
int main()
{
pcl::PointCloud<PointT>::Ptr cloud(new pcl::PointCloud<PointT>);
// Load .pcd file from argv[1]
int ret = pcl::io::loadPCDFile("C:\\Users\\15390\\Desktop\\C++\\test_pcd.pcd", *cloud);
if (ret < 0) {
PCL_ERROR("Couldn't read file %s\n", "teacup.pcd");
return -1;
}
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...
}
//system("pause");
return 0;
}
自己注意修改一下,pcd檔案的目錄。
顯示如下,一開始可能會慢一點,只要編譯通過了就好好等待吧~~
終於完成了第一步,下面開始搞搞論文了,加油!!