最近在學習pcl,C++早就忘記了,因此踩了好些坑ios
不過終於經過了,特此記錄下來sql
環境:win7+pcl1.81+vs2015json
1.安裝pcl1.81dom
下載PCL-1.8.1-AllInOne-msvc2015-win64.exeide
連接:https://pan.baidu.com/s/1wikg-6uNeBdJf2Ra2EA2fA
提取碼:j88f 學習
安裝一直下一步,在彈出OpenNI的安裝程序測試
將OpenNI的安裝路徑設置爲「PCL_ROOT」下3rdParty\OpenNI2文件夾,如C:\Program Files\PCL 1.8.1\3rdParty\OpenNI2優化
說明:atom
安裝結束後若提示「路徑過長沒法添加環境變量」,須要手動加上環境變量spa
set PCL_ROOT=C:\Program Files\PCL 1.8.1 set OPENNI2_INCLUDE64=C:\Program Files\PCL 1.8.1\3rdParty\OpenNI2\Include set OPENNI2_LIB64=C:\Program Files\PCL 1.8.1\3rdParty\OpenNI2\Lib set OPENNI2_REDIST64=C:\Program Files\PCL 1.8.1\3rdParty\OpenNI2\Redist set path=%path%;%PCL_ROOT%\bin\;C:\Program Files\PCL 1.8.1\3rdParty\OpenNI2\Tools;C:\Program Files\PCL 1.8.1\3rdParty\VTK\bin;
2.應用
(1)建立工程pcl
文件—》新建—》項目
(2)配置,調試—》pcl屬性
A.配置屬性—》調試—》環境
path = C:\Program Files\PCL 1.8.1\bin
B.配置屬性—》C/C++—》預處理器
追加
_SCL_SECURE_NO_WARNINGS
_CRT_SECURE_NO_WARNINGS
PCL_NO_PRECOMPILE
C.配置屬性—》VC++目錄—》包含目錄
C:\Program Files\PCL 1.8.1\include\pcl-1.8
C:\Program Files\PCL 1.8.1\3rdParty\Boost\include\boost-1_64
C:\Program Files\PCL 1.8.1\3rdParty\Eigen\eigen3
C:\Program Files\PCL 1.8.1\3rdParty\FLANN\include
C:\Program Files\PCL 1.8.1\3rdParty\Qhull\include
C:\Program Files\PCL 1.8.1\3rdParty\VTK\include\vtk-8.0
C:\Program Files\PCL 1.8.1\3rdParty\OpenNI2\Include
D.配置屬性—》VC++目錄—》庫目錄
C:\Program Files\PCL 1.8.1\lib
C:\Program Files\PCL 1.8.1\3rdParty\Boost\lib
C:\Program Files\PCL 1.8.1\3rdParty\FLANN\lib
C:\Program Files\PCL 1.8.1\3rdParty\Qhull\lib
C:\Program Files\PCL 1.8.1\3rdParty\VTK\lib
C:\Program Files\PCL 1.8.1\3rdParty\OpenNI2\Lib
E.配置屬性—》連接器—》附加依賴項
在Debug模式
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_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_stereo_debug.lib pcl_surface_debug.lib pcl_tracking_debug.lib pcl_visualization_debug.lib libboost_atomic-vc140-mt-gd-1_64.lib libboost_chrono-vc140-mt-gd-1_64.lib libboost_container-vc140-mt-gd-1_64.lib libboost_context-vc140-mt-gd-1_64.lib libboost_coroutine-vc140-mt-gd-1_64.lib libboost_date_time-vc140-mt-gd-1_64.lib libboost_exception-vc140-mt-gd-1_64.lib libboost_filesystem-vc140-mt-gd-1_64.lib libboost_graph-vc140-mt-gd-1_64.lib libboost_iostreams-vc140-mt-gd-1_64.lib libboost_locale-vc140-mt-gd-1_64.lib libboost_log-vc140-mt-gd-1_64.lib libboost_log_setup-vc140-mt-gd-1_64.lib libboost_math_c99-vc140-mt-gd-1_64.lib libboost_math_c99f-vc140-mt-gd-1_64.lib libboost_math_c99l-vc140-mt-gd-1_64.lib libboost_math_tr1-vc140-mt-gd-1_64.lib libboost_math_tr1f-vc140-mt-gd-1_64.lib libboost_math_tr1l-vc140-mt-gd-1_64.lib libboost_mpi-vc140-mt-gd-1_64.lib libboost_prg_exec_monitor-vc140-mt-gd-1_64.lib libboost_program_options-vc140-mt-gd-1_64.lib libboost_random-vc140-mt-gd-1_64.lib libboost_regex-vc140-mt-gd-1_64.lib libboost_serialization-vc140-mt-gd-1_64.lib libboost_signals-vc140-mt-gd-1_64.lib libboost_system-vc140-mt-gd-1_64.lib libboost_test_exec_monitor-vc140-mt-gd-1_64.lib libboost_thread-vc140-mt-gd-1_64.lib libboost_timer-vc140-mt-gd-1_64.lib libboost_unit_test_framework-vc140-mt-gd-1_64.lib libboost_wave-vc140-mt-gd-1_64.lib libboost_wserialization-vc140-mt-gd-1_64.lib flann-gd.lib flann_s-gd.lib flann_cpp-gd.lib flann_cpp_s-gd.lib qhull_d.lib qhull_p_d.lib qhull_r_d.lib qhullcpp_d.lib qhullstatic_d.lib qhullstatic_r_d.lib vtkalglib-8.0-gd.lib vtkChartsCore-8.0-gd.lib vtkCommonColor-8.0-gd.lib vtkCommonComputationalGeometry-8.0-gd.lib vtkCommonCore-8.0-gd.lib vtkCommonDataModel-8.0-gd.lib vtkCommonExecutionModel-8.0-gd.lib vtkCommonMath-8.0-gd.lib vtkCommonMisc-8.0-gd.lib vtkCommonSystem-8.0-gd.lib vtkCommonTransforms-8.0-gd.lib vtkDICOMParser-8.0-gd.lib vtkDomainsChemistry-8.0-gd.lib vtkexoIIc-8.0-gd.lib vtkexpat-8.0-gd.lib vtkFiltersAMR-8.0-gd.lib vtkFiltersCore-8.0-gd.lib vtkFiltersExtraction-8.0-gd.lib vtkFiltersFlowPaths-8.0-gd.lib vtkFiltersGeneral-8.0-gd.lib vtkFiltersGeneric-8.0-gd.lib vtkFiltersGeometry-8.0-gd.lib vtkFiltersHybrid-8.0-gd.lib vtkFiltersHyperTree-8.0-gd.lib vtkFiltersImaging-8.0-gd.lib vtkFiltersModeling-8.0-gd.lib vtkFiltersParallel-8.0-gd.lib vtkFiltersParallelImaging-8.0-gd.lib vtkFiltersPoints-8.0-gd.lib vtkFiltersProgrammable-8.0-gd.lib vtkFiltersSelection-8.0-gd.lib vtkFiltersSMP-8.0-gd.lib vtkFiltersSources-8.0-gd.lib vtkFiltersStatistics-8.0-gd.lib vtkFiltersTexture-8.0-gd.lib vtkFiltersTopology-8.0-gd.lib vtkFiltersVerdict-8.0-gd.lib vtkfreetype-8.0-gd.lib vtkGeovisCore-8.0-gd.lib vtkgl2ps-8.0-gd.lib vtkhdf5-8.0-gd.lib vtkhdf5_hl-8.0-gd.lib vtkImagingColor-8.0-gd.lib vtkImagingCore-8.0-gd.lib vtkImagingFourier-8.0-gd.lib vtkImagingGeneral-8.0-gd.lib vtkImagingHybrid-8.0-gd.lib vtkImagingMath-8.0-gd.lib vtkImagingMorphological-8.0-gd.lib vtkImagingSources-8.0-gd.lib vtkImagingStatistics-8.0-gd.lib vtkImagingStencil-8.0-gd.lib vtkInfovisCore-8.0-gd.lib vtkInfovisLayout-8.0-gd.lib vtkInteractionImage-8.0-gd.lib vtkInteractionStyle-8.0-gd.lib vtkInteractionWidgets-8.0-gd.lib vtkIOAMR-8.0-gd.lib vtkIOCore-8.0-gd.lib vtkIOEnSight-8.0-gd.lib vtkIOExodus-8.0-gd.lib vtkIOExport-8.0-gd.lib vtkIOExportOpenGL-8.0-gd.lib vtkIOGeometry-8.0-gd.lib vtkIOImage-8.0-gd.lib vtkIOImport-8.0-gd.lib vtkIOInfovis-8.0-gd.lib vtkIOLegacy-8.0-gd.lib vtkIOLSDyna-8.0-gd.lib vtkIOMINC-8.0-gd.lib vtkIOMovie-8.0-gd.lib vtkIONetCDF-8.0-gd.lib vtkIOParallel-8.0-gd.lib vtkIOParallelXML-8.0-gd.lib vtkIOPLY-8.0-gd.lib vtkIOSQL-8.0-gd.lib vtkIOTecplotTable-8.0-gd.lib vtkIOVideo-8.0-gd.lib vtkIOXML-8.0-gd.lib vtkIOXMLParser-8.0-gd.lib vtkjpeg-8.0-gd.lib vtkjsoncpp-8.0-gd.lib vtklibharu-8.0-gd.lib vtklibxml2-8.0-gd.lib vtklz4-8.0-gd.lib vtkmetaio-8.0-gd.lib vtknetcdf_c++-gd.lib vtkNetCDF-8.0-gd.lib vtkoggtheora-8.0-gd.lib vtkParallelCore-8.0-gd.lib vtkpng-8.0-gd.lib vtkproj4-8.0-gd.lib vtkRenderingAnnotation-8.0-gd.lib vtkRenderingContext2D-8.0-gd.lib vtkRenderingContextOpenGL-8.0-gd.lib vtkRenderingCore-8.0-gd.lib vtkRenderingFreeType-8.0-gd.lib vtkRenderingGL2PS-8.0-gd.lib vtkRenderingImage-8.0-gd.lib vtkRenderingLabel-8.0-gd.lib vtkRenderingLIC-8.0-gd.lib vtkRenderingLOD-8.0-gd.lib vtkRenderingOpenGL-8.0-gd.lib vtkRenderingVolume-8.0-gd.lib vtkRenderingVolumeOpenGL-8.0-gd.lib vtksqlite-8.0-gd.lib vtksys-8.0-gd.lib vtktiff-8.0-gd.lib vtkverdict-8.0-gd.lib vtkViewsContext2D-8.0-gd.lib vtkViewsCore-8.0-gd.lib vtkViewsInfovis-8.0-gd.lib vtkzlib-8.0-gd.lib OpenNI2.lib
在Release模式
pcl_common_release.lib pcl_features_release.lib pcl_filters_release.lib pcl_io_ply_release.lib pcl_io_release.lib pcl_kdtree_release.lib pcl_keypoints_release.lib pcl_ml_release.lib pcl_octree_release.lib pcl_outofcore_release.lib pcl_people_release.lib pcl_recognition_release.lib pcl_registration_release.lib pcl_sample_consensus_release.lib pcl_search_release.lib pcl_segmentation_release.lib pcl_stereo_release.lib pcl_surface_release.lib pcl_tracking_release.lib pcl_visualization_release.lib libboost_atomic-vc140-mt-1_64.lib libboost_chrono-vc140-mt-1_64.lib libboost_container-vc140-mt-1_64.lib libboost_context-vc140-mt-1_64.lib libboost_coroutine-vc140-mt-1_64.lib libboost_date_time-vc140-mt-1_64.lib libboost_exception-vc140-mt-1_64.lib libboost_filesystem-vc140-mt-1_64.lib libboost_graph-vc140-mt-1_64.lib libboost_iostreams-vc140-mt-1_64.lib libboost_locale-vc140-mt-1_64.lib libboost_log-vc140-mt-1_64.lib libboost_log_setup-vc140-mt-1_64.lib libboost_math_c99-vc140-mt-1_64.lib libboost_math_c99f-vc140-mt-1_64.lib libboost_math_c99l-vc140-mt-1_64.lib libboost_math_tr1-vc140-mt-1_64.lib libboost_math_tr1f-vc140-mt-1_64.lib libboost_math_tr1l-vc140-mt-1_64.lib libboost_mpi-vc140-mt-1_64.lib libboost_prg_exec_monitor-vc140-mt-1_64.lib libboost_program_options-vc140-mt-1_64.lib libboost_random-vc140-mt-1_64.lib libboost_regex-vc140-mt-1_64.lib libboost_serialization-vc140-mt-1_64.lib libboost_signals-vc140-mt-1_64.lib libboost_system-vc140-mt-1_64.lib libboost_test_exec_monitor-vc140-mt-1_64.lib libboost_thread-vc140-mt-1_64.lib libboost_timer-vc140-mt-1_64.lib libboost_unit_test_framework-vc140-mt-1_64.lib libboost_wave-vc140-mt-1_64.lib libboost_wserialization-vc140-mt-1_64.lib flann.lib flann_cpp.lib flann_cpp_s.lib flann_s.lib qhull.lib qhull_p.lib qhull_r.lib qhullcpp.lib qhullstatic.lib qhullstatic_r.lib vtkalglib-8.0.lib vtkChartsCore-8.0.lib vtkCommonColor-8.0.lib vtkCommonComputationalGeometry-8.0.lib vtkCommonCore-8.0.lib vtkCommonDataModel-8.0.lib vtkCommonExecutionModel-8.0.lib vtkCommonMath-8.0.lib vtkCommonMisc-8.0.lib vtkCommonSystem-8.0.lib vtkCommonTransforms-8.0.lib vtkDICOMParser-8.0.lib vtkDomainsChemistry-8.0.lib vtkexoIIc-8.0.lib vtkexpat-8.0.lib vtkFiltersAMR-8.0.lib vtkFiltersCore-8.0.lib vtkFiltersExtraction-8.0.lib vtkFiltersFlowPaths-8.0.lib vtkFiltersGeneral-8.0.lib vtkFiltersGeneric-8.0.lib vtkFiltersGeometry-8.0.lib vtkFiltersHybrid-8.0.lib vtkFiltersHyperTree-8.0.lib vtkFiltersImaging-8.0.lib vtkFiltersModeling-8.0.lib vtkFiltersParallel-8.0.lib vtkFiltersParallelImaging-8.0.lib vtkFiltersPoints-8.0.lib vtkFiltersProgrammable-8.0.lib vtkFiltersSelection-8.0.lib vtkFiltersSMP-8.0.lib vtkFiltersSources-8.0.lib vtkFiltersStatistics-8.0.lib vtkFiltersTexture-8.0.lib vtkFiltersTopology-8.0.lib vtkFiltersVerdict-8.0.lib vtkfreetype-8.0.lib vtkGeovisCore-8.0.lib vtkgl2ps-8.0.lib vtkhdf5-8.0.lib vtkhdf5_hl-8.0.lib vtkImagingColor-8.0.lib vtkImagingCore-8.0.lib vtkImagingFourier-8.0.lib vtkImagingGeneral-8.0.lib vtkImagingHybrid-8.0.lib vtkImagingMath-8.0.lib vtkImagingMorphological-8.0.lib vtkImagingSources-8.0.lib vtkImagingStatistics-8.0.lib vtkImagingStencil-8.0.lib vtkInfovisCore-8.0.lib vtkInfovisLayout-8.0.lib vtkInteractionImage-8.0.lib vtkInteractionStyle-8.0.lib vtkInteractionWidgets-8.0.lib vtkIOAMR-8.0.lib vtkIOCore-8.0.lib vtkIOEnSight-8.0.lib vtkIOExodus-8.0.lib vtkIOExport-8.0.lib vtkIOExportOpenGL-8.0.lib vtkIOGeometry-8.0.lib vtkIOImage-8.0.lib vtkIOImport-8.0.lib vtkIOInfovis-8.0.lib vtkIOLegacy-8.0.lib vtkIOLSDyna-8.0.lib vtkIOMINC-8.0.lib vtkIOMovie-8.0.lib vtkIONetCDF-8.0.lib vtkIOParallel-8.0.lib vtkIOParallelXML-8.0.lib vtkIOPLY-8.0.lib vtkIOSQL-8.0.lib vtkIOTecplotTable-8.0.lib vtkIOVideo-8.0.lib vtkIOXML-8.0.lib vtkIOXMLParser-8.0.lib vtkjpeg-8.0.lib vtkjsoncpp-8.0.lib vtklibharu-8.0.lib vtklibxml2-8.0.lib vtklz4-8.0.lib vtkmetaio-8.0.lib vtknetcdf_c++.lib vtkNetCDF-8.0.lib vtkoggtheora-8.0.lib vtkParallelCore-8.0.lib vtkpng-8.0.lib vtkproj4-8.0.lib vtkRenderingAnnotation-8.0.lib vtkRenderingContext2D-8.0.lib vtkRenderingContextOpenGL-8.0.lib vtkRenderingCore-8.0.lib vtkRenderingFreeType-8.0.lib vtkRenderingGL2PS-8.0.lib vtkRenderingImage-8.0.lib vtkRenderingLabel-8.0.lib vtkRenderingLIC-8.0.lib vtkRenderingLOD-8.0.lib vtkRenderingOpenGL-8.0.lib vtkRenderingVolume-8.0.lib vtkRenderingVolumeOpenGL-8.0.lib vtksqlite-8.0.lib vtksys-8.0.lib vtktiff-8.0.lib vtkverdict-8.0.lib vtkViewsContext2D-8.0.lib vtkViewsCore-8.0.lib vtkViewsInfovis-8.0.lib vtkzlib-8.0.lib OpenNI2.lib
說明:
debug的比release的文件名多 -gd,_d是不一樣庫中debug的命名規則
其中文件名來自 PCL 1.8.1\lib,PCL 1.8.1\3rdParty\Boost\lib,PCL 1.8.1\3rdParty\VTK\lib,PCL 1.8.1\3rdParty\FLANN\lib,PCL 1.8.1\3rdParty\OpenNI2\Lib,PCL 1.8.1\3rdParty\Qhull\lib
(3)測試
使用點雲生成點,並輸出
#include<iostream> #include<pcl/io/pcd_io.h> #include<pcl/point_types.h> int main(int argc, char** argv) { pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>); //Fill in the cloud data cloud->width = 5; cloud->height = 1; cloud->points.resize(cloud->width*cloud->height); for (size_t i = 0; i < cloud->points.size(); ++i) { cloud->points[i].x = 1024 * rand() / (RAND_MAX + 1.0f); cloud->points[i].y = 1024 * rand() / (RAND_MAX + 1.0f); cloud->points[i].z = 1024 * rand() / (RAND_MAX + 1.0f); } std::cout << "Cloud before projection:" << std::endl; for (size_t i = 0; i < cloud->points.size(); ++i) { std::cout << " " << cloud->points[i].x << " " << cloud->points[i].y << " " << cloud->points[i].z << " " << std::endl; } system("pause"); return 0; }
過濾器
#include<iostream> #include<pcl/io/pcd_io.h> #include<pcl/point_types.h> #include<pcl/ModelCoefficients.h> #include<pcl/filters/project_inliers.h> int main(int argc, char** argv) { pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>); pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_projected(new pcl::PointCloud<pcl::PointXYZ>); //Fill in the cloud data cloud->width = 5; cloud->height = 1; cloud->points.resize(cloud->width*cloud->height); for (size_t i = 0; i < cloud->points.size(); ++i) { cloud->points[i].x = 1024 * rand() / (RAND_MAX + 1.0f); cloud->points[i].y = 1024 * rand() / (RAND_MAX + 1.0f); cloud->points[i].z = 1024 * rand() / (RAND_MAX + 1.0f); } std::cerr << "Cloud before projection:" << std::endl; for (size_t i = 0; i < cloud->points.size(); ++i) { std::cerr << " " << cloud->points[i].x << " " << cloud->points[i].y << " " << cloud->points[i].z << " " << std::endl; } // Create a set of planar coefficients with X=Y=0,Z=1 pcl::ModelCoefficients::Ptr coefficients(new pcl::ModelCoefficients()); coefficients->values.resize(4); coefficients->values[0] = coefficients->values[1] = 0; coefficients->values[2] = 1.0; coefficients->values[3] = 0; // Create the filtering object pcl::ProjectInliers<pcl::PointXYZ>proj; proj.setModelType(pcl::SACMODEL_PLANE); proj.setInputCloud(cloud); proj.setModelCoefficients(coefficients); proj.filter(*cloud_projected); std::cerr << "Cloud after projection: " << std::endl; for (size_t i = 0; i < cloud_projected->points.size(); ++i) { std::cerr << " " << cloud_projected->points[i].x << " " << cloud_projected->points[i].y << " " << cloud_projected->points[i].z << " " << std::endl; } system("pause"); return 0; }
優化將點展現出來
#include<iostream> #include<pcl/point_cloud.h> #include<pcl/point_types.h> #include <pcl/visualization/pcl_visualizer.h> int main() { pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>); //設置點雲大小 cloud->points.resize(500); //填充點雲數據 for (size_t i = 0; i < cloud->points.size(); ++i) { cloud->points[i].x = 1024 * rand() / (RAND_MAX + 1.0f); cloud->points[i].y = 1024 * rand() / (RAND_MAX + 1.0f); cloud->points[i].z = 1024 * rand() / (RAND_MAX + 1.0f); } //聲明視窗 boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer(new pcl::visualization::PCLVisualizer("3D Viewer")); //設置背景色 viewer->setBackgroundColor(1.0f, 0.5f, 1.0f); //預處理點雲顏色 pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> magenta(cloud, 255, 255, 255); //把點雲加載到視窗 viewer->addPointCloud(cloud, magenta, "cloud"); //設置點雲大小 viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 2, "cloud"); //顯示 viewer->spin(); }
注:
若是出現如下錯誤
(1)LNK1112 模塊計算機類型「x64」與目標計算機類型「X86」衝突解決方案
生成—配置管理器
補充:
須要從新配置,即2(2)部分的操做
(2)C1010 在查找預編譯頭時遇到意外的文件結尾
(3)C4996 'pcl::SAC_SAMPLE_SIZE': This map is deprecated and is kept only to prevent breaking existing user code.
打開項目屬性頁>C/C++>常規>SDL檢查(設置爲否)
從新編譯,原先的錯誤信息變成了警告。
經過pcl的學習,教訓也是很大的:
不要偷懶,不要整個的複製代碼,要認真讀,認真看,不要跳躍,必定要沉下心來,沉下心來,要認真