1. 程式人生 > >PCL配置以及簡單的點雲顯示

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檔案的目錄。

顯示如下,一開始可能會慢一點,只要編譯通過了就好好等待吧~~

終於完成了第一步,下面開始搞搞論文了,加油!!