Win10 +VS2017 配置點(diǎn)云庫 PCL1.9.1

一、下載PCL1.9.1

Github下載地址:https://github.com/PointCloudLibrary/pcl/releases

下載紅框內(nèi)的兩個(gè)文件


Github下載速度看人品。

二、安裝

2.1 安裝“PCL-1.9.1-AllInOne-msvc2017-win64.exe”。

(1)選擇第二個(gè),自動(dòng)添加系統(tǒng)變量


(2)安裝路徑選擇D盤,系統(tǒng)會(huì)自動(dòng)新建PCL 1.9.1文件夾。


2.2 安裝過程中需要安裝OpenNI,選擇路徑(D:\PCL 1.9.1\3rdParty\OpenNI2)安裝即可。

2.3 全部安裝完成后,將pcl-1.9.1-pdb-msvc2017-win64.zip解壓后的.pdb文件拷貝到(D:\PCL 1.9.1\bin)中。

2.4 設(shè)置環(huán)境變量:右擊計(jì)算機(jī)—屬性—高級(jí)系統(tǒng)設(shè)置—高級(jí)—環(huán)境變量—用戶變量—Path—編輯!

如下圖所示,設(shè)置完成后重啟電腦。


在這里直接給出,防止出現(xiàn)錯(cuò)誤(依次添加):

%PCL_ROOT%\3rdParty\FLANN\bin

%PCL_ROOT%\3rdParty\VTK\bin

%OPENNI2_REDIST64%

%OPENNI2_LIB64%

%OPENNI2_INCLUDE64%

到此,環(huán)境變量的配置完成。

三、配置

3.1 新建空項(xiàng)目,

解決方案配置選擇Debug,解決方案平臺(tái)選擇x64。


3.2? 右擊工程—屬性—VC++目錄—包含目錄,添加7個(gè)include路徑

具體添加的include路徑如下:

D:\PCL 1.9.1\include\pcl-1.9

D:\PCL 1.9.1\3rdParty\Boost\include\boost-1_68

D:\PCL 1.9.1\3rdParty\Eigen\eigen3

D:\PCL 1.9.1\3rdParty\FLANN\include

D:\PCL 1.9.1\3rdParty\Qhull\include

D:\PCL 1.9.1\3rdParty\VTK\include\vtk-8.1

D:\PCL 1.9.1\3rdParty\OpenNI2\Include

3.3 VC++目錄—包含目錄,添加6個(gè)lib路徑

具體添加的lib路徑如下:

D:\PCL 1.9.1\lib

D:\PCL 1.9.1\3rdParty\Boost\lib

D:\PCL 1.9.1\3rdParty\FLANN\lib

D:\PCL 1.9.1\3rdParty\Qhull\lib

D:\PCL 1.9.1\3rdParty\OpenNI2\Lib

D:\PCL 1.9.1\3rdParty\VTK\lib

3.4 C/C++—常規(guī)—SDL檢查—否

此處可能會(huì)出現(xiàn)找不到 **C/C++** 選項(xiàng)的情況,解決方案為:


新建一個(gè)C++源文件之后,再打開屬性頁就可用看到C/C++選項(xiàng)。


3.5 C/C++—預(yù)處理器—預(yù)處理器定義—添加:

_CRT_SECURE_NO_WARNINGS

_SCL_SECURE_NO_WARNINGS

_SILENCE_FPOS_SEEKPOS_DEPRECATION_WARNING


3.6 配置屬性—調(diào)試—環(huán)境—添加:

PATH=D:\PCL1.9.1\\bin;D:\PCL1.9.1\\3rdParty\FLANN\bin;D:\PCL1.9.1\\3rdParty\VTK\bin;D:\PCL 1.9.1\\3rdParty\OpenNI2\Tools


3.7 鏈接器—輸入—附加依賴項(xiàng)——添加PCL和VTK的相關(guān)lib文件。我用的Debug版本。

附加依賴項(xiàng)具體添加內(nèi)容如下:

輸入到屬性表里邊的時(shí)候必須一行對(duì)應(yīng)一個(gè)lib才能成功。

Debug版本

pcl_common_debug.lib

pcl_features_debug.lib

pcl_filters_debug.lib

pcl_io_debug.lib

pcl_io_ply_release.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

vtkalglib-8.1-gd.lib

vtkChartsCore-8.1-gd.lib

vtkCommonColor-8.1-gd.lib

vtkCommonComputationalGeometry-8.1-gd.lib

vtkCommonCore-8.1-gd.lib

vtkCommonDataModel-8.1-gd.lib

vtkCommonExecutionModel-8.1-gd.lib

vtkCommonMath-8.1-gd.lib

vtkCommonMisc-8.1-gd.lib

vtkCommonSystem-8.1-gd.lib

vtkCommonTransforms-8.1-gd.lib

vtkDICOMParser-8.1-gd.lib

vtkDomainsChemistry-8.1-gd.lib

vtkexoIIc-8.1-gd.lib

vtkexpat-8.1-gd.lib

vtkFiltersAMR-8.1-gd.lib

vtkFiltersCore-8.1-gd.lib

vtkFiltersExtraction-8.1-gd.lib

vtkFiltersFlowPaths-8.1-gd.lib

vtkFiltersGeneral-8.1-gd.lib

vtkFiltersGeneric-8.1-gd.lib

vtkFiltersGeometry-8.1-gd.lib

vtkFiltersHybrid-8.1-gd.lib

vtkFiltersHyperTree-8.1-gd.lib

vtkFiltersImaging-8.1-gd.lib

vtkFiltersModeling-8.1-gd.lib

vtkFiltersParallel-8.1-gd.lib

vtkFiltersParallelImaging-8.1-gd.lib

vtkFiltersPoints-8.1-gd.lib

vtkFiltersProgrammable-8.1-gd.lib

vtkFiltersSelection-8.1-gd.lib

vtkFiltersSMP-8.1-gd.lib

vtkFiltersSources-8.1-gd.lib

vtkFiltersStatistics-8.1-gd.lib

vtkFiltersTexture-8.1-gd.lib

vtkFiltersTopology-8.1-gd.lib

vtkFiltersVerdict-8.1-gd.lib

vtkfreetype-8.1-gd.lib

vtkGeovisCore-8.1-gd.lib

vtkgl2ps-8.1-gd.lib

vtkhdf5-8.1-gd.lib

vtkhdf5_hl-8.1-gd.lib

vtkImagingColor-8.1-gd.lib

vtkImagingCore-8.1-gd.lib

vtkImagingFourier-8.1-gd.lib

vtkImagingGeneral-8.1-gd.lib

vtkImagingHybrid-8.1-gd.lib

vtkImagingMath-8.1-gd.lib

vtkImagingMorphological-8.1-gd.lib

vtkImagingSources-8.1-gd.lib

vtkImagingStatistics-8.1-gd.lib

vtkImagingStencil-8.1-gd.lib

vtkInfovisCore-8.1-gd.lib

vtkInfovisLayout-8.1-gd.lib

vtkInteractionImage-8.1-gd.lib

vtkInteractionStyle-8.1-gd.lib

vtkInteractionWidgets-8.1-gd.lib

vtkIOAMR-8.1-gd.lib

vtkIOCore-8.1-gd.lib

vtkIOEnSight-8.1-gd.lib

vtkIOExodus-8.1-gd.lib

vtkIOExport-8.1-gd.lib

vtkIOExportOpenGL-8.1-gd.lib

vtkIOGeometry-8.1-gd.lib

vtkIOImage-8.1-gd.lib

vtkIOImport-8.1-gd.lib

vtkIOInfovis-8.1-gd.lib

vtkIOLegacy-8.1-gd.lib

vtkIOLSDyna-8.1-gd.lib

vtkIOMINC-8.1-gd.lib

vtkIOMovie-8.1-gd.lib

vtkIONetCDF-8.1-gd.lib

vtkIOParallel-8.1-gd.lib

vtkIOParallelXML-8.1-gd.lib

vtkIOPLY-8.1-gd.lib

vtkIOSQL-8.1-gd.lib

vtkIOTecplotTable-8.1-gd.lib

vtkIOVideo-8.1-gd.lib

vtkIOXML-8.1-gd.lib

vtkIOXMLParser-8.1-gd.lib

vtkjpeg-8.1-gd.lib

vtkjsoncpp-8.1-gd.lib

vtklibharu-8.1-gd.lib

vtklibxml2-8.1-gd.lib

vtklz4-8.1-gd.lib

vtkmetaio-8.1-gd.lib

vtkNetCDF-8.1-gd.lib

vtknetcdfcpp-8.1-gd.lib

vtkoggtheora-8.1-gd.lib

vtkParallelCore-8.1-gd.lib

vtkpng-8.1-gd.lib

vtkproj4-8.1-gd.lib

vtkRenderingAnnotation-8.1-gd.lib

vtkRenderingContext2D-8.1-gd.lib

vtkRenderingContextOpenGL-8.1-gd.lib

vtkRenderingCore-8.1-gd.lib

vtkRenderingFreeType-8.1-gd.lib

vtkRenderingGL2PS-8.1-gd.lib

vtkRenderingImage-8.1-gd.lib

vtkRenderingLabel-8.1-gd.lib

vtkRenderingLIC-8.1-gd.lib

vtkRenderingLOD-8.1-gd.lib

vtkRenderingOpenGL-8.1-gd.lib

vtkRenderingVolume-8.1-gd.lib

vtkRenderingVolumeOpenGL-8.1-gd.lib

vtksqlite-8.1-gd.lib

vtksys-8.1-gd.lib

vtktiff-8.1-gd.lib

vtkverdict-8.1-gd.lib

vtkViewsContext2D-8.1-gd.lib

vtkViewsCore-8.1-gd.lib

vtkViewsInfovis-8.1-gd.lib

vtkzlib-8.1-gd.lib

四、測(cè)試

示例代碼

#include <iostream>

#include <vector>

#include <ctime>

#include <pcl/point_cloud.h>

#include <pcl/octree/octree.h>

#include <pcl/visualization/pcl_visualizer.h>

using namespace std;

int

main(int argc, char**argv)

{

srand((unsigned int)time(NULL));

pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);

// 創(chuàng)建點(diǎn)云數(shù)據(jù)

cloud->width = 1000;

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.0f* rand() / (RAND_MAX + 1.0f);

cloud->points[i].y = 1024.0f* rand() / (RAND_MAX + 1.0f);

cloud->points[i].z = 1024.0f* rand() / (RAND_MAX + 1.0f);

}

float resolution = 128.0f;

pcl::octree::OctreePointCloudSearch<pcl::PointXYZ> octree(resolution);

octree.setInputCloud(cloud);

octree.addPointsFromInputCloud();

pcl::PointXYZ searchPoint;

searchPoint.x = 1024.0f* rand() / (RAND_MAX + 1.0f);

searchPoint.y = 1024.0f* rand() / (RAND_MAX + 1.0f);

searchPoint.z = 1024.0f* rand() / (RAND_MAX + 1.0f);

// 體素內(nèi)近鄰搜索

vector<int>pointIdxVec;

if (octree.voxelSearch(searchPoint, pointIdxVec))

{

cout << "Neighbors within voxel search at (" << searchPoint.x

<< " " << searchPoint.y << " " << searchPoint.z << ")" << endl;

for (size_t i = 0; i < pointIdxVec.size(); ++i)

std::cout << "? ? " << cloud->points[pointIdxVec[i]].x

<< " " << cloud->points[pointIdxVec[i]].y

<< " " << cloud->points[pointIdxVec[i]].z << std::endl;

}

//K近鄰搜索

int K = 10;

vector<int>pointIdxNKNSearch;

vector<float>pointNKNSquaredDistance;

cout << "K nearest neighbor search at (" << searchPoint.x

<< " " << searchPoint.y << " " << searchPoint.z << ") with K=" << K << endl;

if (octree.nearestKSearch(searchPoint, K, pointIdxNKNSearch, pointNKNSquaredDistance) > 0)

{

for (size_t i = 0; i < pointIdxNKNSearch.size(); ++i)

cout << "? ? " << cloud->points[pointIdxNKNSearch[i]].x << " "

<< cloud->points[pointIdxNKNSearch[i]].y

<< " " << cloud->points[pointIdxNKNSearch[i]].z

<< " (squared distance: " << pointNKNSquaredDistance[i] << ")" << endl;

}

//半徑內(nèi)近鄰搜索

vector<int>pointIdxRadiusSearch;

vector<float>pointRadiusSquaredDistance;

float radius = 256.0f* rand() / (RAND_MAX + 1.0f);

cout << "Neighbors within radius search at (" << searchPoint.x

<< " " << searchPoint.y

<< " " << searchPoint.z

<< ") with radius=" << radius << endl;

if (octree.radiusSearch(searchPoint, radius, pointIdxRadiusSearch, pointRadiusSquaredDistance) > 0)

{

for (size_t i = 0; i < pointIdxRadiusSearch.size(); ++i)

cout << "? ? " << cloud->points[pointIdxRadiusSearch[i]].x

<< " " << cloud->points[pointIdxRadiusSearch[i]].y

<< " " << cloud->points[pointIdxRadiusSearch[i]].z

<< " (squared distance: " << pointRadiusSquaredDistance[i] << ")" << endl;

}

// 初始化點(diǎn)云可視化對(duì)象

boost::shared_ptr<pcl::visualization::PCLVisualizer>viewer(new pcl::visualization::PCLVisualizer("顯示點(diǎn)云"));

viewer->setBackgroundColor(0, 0, 0);? //設(shè)置背景顏色為黑色

// 對(duì)點(diǎn)云著色可視化 (red).

pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ>target_color(cloud, 255, 0, 0);

viewer->addPointCloud<pcl::PointXYZ>(cloud, target_color, "target cloud");

viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, "target cloud");

// 啟動(dòng)可視化

//viewer->addCoordinateSystem(0.1);? //顯示XYZ指示軸

//viewer->initCameraParameters();? //初始化攝像頭參數(shù)

// 等待直到可視化窗口關(guān)閉

while (!viewer->wasStopped())

{

viewer->spinOnce(100);

boost::this_thread::sleep(boost::posix_time::microseconds(1000));

}

return (0);

}

五、可能報(bào)錯(cuò)及解決方案

1、添加頭文件``#include <pcl/registration/icp.h>``編譯的時(shí)候可能會(huì)遇到如下報(bào)錯(cuò):`1>...\flann\algorithms\dist.h(523): error C3861: “pop_t”: 找不到標(biāo)識(shí)符`

解決方法:

雙擊該行輸出直接打開`dist.h`頭文件,將第503行的`typedef unsigned long long pop_t;`移動(dòng)到第480行前面(如下圖);


2、可能出現(xiàn)如下情況:


解決方法:


3、其他錯(cuò)誤情況目前沒有

五、結(jié)果

會(huì)出現(xiàn)如下結(jié)果,輸出的是渲染信息,關(guān)掉即可,沒什么用。




至此,PCL1.9.1配置完成!!!!!該版本的PCL點(diǎn)云庫兼容VisualStudio2019,配置方法完全相同。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容