Win10 系統下VisualStudio2019 配置點雲庫 PCL1.11.0的圖文教程
一、下載PCL1.11.0
Github下載地址:https://github.com/PointCloudLibrary/pcl/releases
下載紅框內的兩個檔案
二、安裝PCL1.11.0
2.1 安裝“PCL-1.11.0-AllInOne-msvc2019-win64.exe”。
(1)選擇第二個,自動新增系統變數
(2)安裝路徑選擇D盤,系統會自動新建PCL 1.11.0資料夾。
2.2 安裝完成之後開啟資料夾 D:\PCL 1.11.0\3rdParty\OpenNI2
雙擊OpenNI-Windows-x64-2.2 選擇路徑(D:\PCL 1.11.0\3rdParty\OpenNI2)安裝即可。
2.3 全部安裝完成後,將pcl-1.11.0-pdb-msvc2019-win64.zip解壓後的.pdb檔案拷貝到(D:\PCL 1.11.0\bin)中。
2.4 設定環境變數:右擊計算機—屬性—高階系統設定—高階—環境變數—使用者變數—Path—編輯!
如下圖所示,設定完成後重啟電腦。
在這裡直接給出,防止出現錯誤(依次新增):
%PCL_ROOT%\3rdParty\FLANN\bin
%PCL_ROOT%\3rdParty\VTK\bin
%OPENNI2_REDIST64%
%OPENNI2_LIB64%
%OPENNI2_INCLUDE64%
到此,環境變數的配置完成。
三、VS2019相關設定
3.1 新建空專案
解決方案配置選擇Debug,解決方案平臺選擇x64。
3.2 新建一個C++原始檔
3.3 右擊新建的專案—屬性:開啟屬性表
3.4 配置屬性—除錯—環境—新增:
PATH=D:\PCL 1.11.0\\bin;D:\PCL 1.11.0\\3rdParty\FLANN\bin;D:\PCL 1.11.0\\3rdParty\VTK\bin;D:\PCL 1.11.0\\3rdParty\OpenNI2\Tools
3.5 C/C++—語言—符合模式:否
3.6 C/C++—常規—SDL檢查:否
四、配置PCL1.11.0
為了使用方便,這裡使用新增屬性表的形式
4.1 檢視—其他視窗—屬性管理器
4.2 開啟屬性管理器之後,選擇Debug|X64—單擊Debug|X64左側倒三角—右擊選擇 新增型專案屬性表
4.3 專案屬性表命名
4.4 雙擊新新增的屬性表—VC++目錄—包含目錄,新增7個include路徑
具體新增的include路徑如下:
D:\PCL 1.11.0\include\pcl-1.11
D:\PCL 1.11.0\3rdParty\Boost\include\boost-1_73
D:\PCL 1.11.0\3rdParty\Eigen\eigen3
D:\PCL 1.11.0\3rdParty\FLANN\include
D:\PCL 1.11.0\3rdParty\Qhull\include
D:\PCL 1.11.0\3rdParty\VTK\include\vtk-8.2
D:\PCL 1.11.0\3rdParty\OpenNI2\Include
4.5 VC++目錄—包含目錄,新增6個lib路徑
具體新增的lib路徑如下:
D:\PCL 1.11.0\lib
D:\PCL 1.11.0\3rdParty\Boost\lib
D:\PCL 1.11.0\3rdParty\FLANN\lib
D:\PCL 1.11.0\3rdParty\Qhull\lib
D:\PCL 1.11.0\3rdParty\OpenNI2\Lib
D:\PCL 1.11.0\3rdParty\VTK\lib
4.6 C/C++—前處理器—前處理器定義—新增:
BOOST_USE_WINDOWS_H
NOMINMAX
_CRT_SECURE_NO_DEPRECATE
4.7 連結器—輸入—附加依賴項——新增PCL和VTK的相關lib檔案。我用的Debug版本。
附加依賴項具體新增內容如下:(內容略多,放在PCL1.11.0附加依賴項裡邊了。文章末尾 附錄中 給出批量獲取附加依賴項的方法)
輸入到屬性表裡邊的時候必須一行對應一個lib才能成功。
Debug版本
4.8儲存屬性表
下一次需要建立新專案的時候,只需進行第三步 VS2019相關設定 的操作,然後開啟屬性管理器,新增現有屬性表,找到之前儲存的屬性表新增進去即可。
五、測試程式碼
#include <iostream> #include <vector> #include <ctime> #include <pcl/point_cloud.h> #include <pcl/octree/octree.h> #include <boost/thread/thread.hpp> #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>); // 建立點雲資料 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); } pcl::octree::OctreePointCloudSearch<pcl::PointXYZ> octree(0.1); 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); //半徑內近鄰搜尋 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; } // 初始化點雲視覺化物件 boost::shared_ptr<pcl::visualization::PCLVisualizer>viewer(new pcl::visualization::PCLVisualizer("顯示點雲")); viewer->setBackgroundColor(0,0); //設定背景顏色為黑色 // 對點雲著色視覺化 (red). pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ>target_color(cloud,255,0); viewer->addPointCloud<pcl::PointXYZ>(cloud,target_color,"target cloud"); viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE,1,"target cloud"); // 等待直到視覺化視窗關閉 while (!viewer->wasStopped()) { viewer->spinOnce(100); boost::this_thread::sleep(boost::posix_time::microseconds(1000)); } return (0); }
輸出下圖(數字可能不同),則表示安裝成功!
六、附錄—獲取自己的連結庫列表
win+r調出“執行”視窗並輸出cmd
輸入:cd /d D:\PCL 1.11.0\3rdParty\VTK\lib 回車 (填自己的路徑)
輸入:dir /b *.lib *>0.txt 回車
這時開啟你對應路勁的目錄,多了一個0.txt檔案,裡面存了你這個資料夾裡所有連結庫名字。
由於每一個Debug版本和Release版本的連結庫是挨在一起的。寫一個讀取文件並對其分別儲存就行了。
具體程式碼如下:(主要功能是讀取一個txt檔案,將其中奇數行和偶數行單獨輸出到新的txt文件。)
#include <iostream> #include <string> #include <fstream> #include <iostream> using namespace std; int main() { ifstream txtfile;//開啟讀取的檔案 ofstream txt01;//儲存的檔案 ofstream txt02;//儲存的檔案 string temp; int index = 0;//用於判斷奇偶 txtfile.open("0.txt",ios::in); while (!txtfile.eof()) // 若未到檔案結束一直迴圈 { getline(txtfile,temp);//一行一行讀取 if (index%2==0)//判斷除以2的餘數,即為奇偶的判斷 { txt01.open("1.txt",ios::app); txt01 << temp; txt01 << endl; txt01.close(); } else { txt02.open("2.txt",ios::app); txt02 << temp; txt02 << endl; txt02.close(); } index++; } txtfile.close(); //關閉檔案 txtfile.close(); txt01.close(); txt02.close(); return 0; }
到此這篇關於Win10 系統下VisualStudio2019 配置點雲庫 PCL1.11.0的圖文教程的文章就介紹到這了,更多相關VisualStudio2019 配置點雲庫 PCL1.11.0內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!