Win10系統PCL + VS2019的安裝

James506發表於2020-11-01

系統環境:win10 64位,VS2019已安裝 anaconda virtualenv python3.7 等已安裝。

現需要安裝 PCL,但因系統裡安裝的是VS2019,因此要選擇合適的PCL版本。

現在匹配的版本:VS2019 + PCL1.11.1 

1. 下載安裝C++版本的PCL

本機VS2019,在 https://github.com/PointCloudLibrary/pcl/releases/ 上選擇支援的版本為1.11.1。

 

下載完畢,安裝即可。注意裡面有一個選項要選為所有使用者新增path。

安裝完以後會讓安裝一個第三方的庫,直接預設安裝即可。

安裝到最後的時候會彈出安裝OpenNI的提示(如果沒有彈出,則到 PCL 1.11.1\3rdParty\ 目錄下找到OpenNI-Windows-x64-2.2.msi 進行安裝),此時也會選擇安裝路徑,預設是C盤。但此前安裝已經在pcl的安裝目錄下的3rdParty資料夾中已經有了空的OpenNI2資料夾,建議將OpenNI安裝路徑改到此資料夾下,即安裝路徑為“C:\Program Files\PCL 1.11.1\3rdParty\OpenNI2”

解壓“pcl-1.11.1-pdb-msvc2019-win64.zip”,將解壓得到的資料夾中的內容新增“…\PCL 1.11.0\bin”中

pcl庫安裝完成,接下來配置環境變數,在系統環境變數中,確認新增以下路徑:

C:\Program Files\PCL 1.11.1\bin

C:\Program Files\PCL 1.11.1\3rdParty\VTK\bin

C:\Program Files\PCL 1.11.1\3rdParty\OpenNI2\Redist

否則後面可能會報錯“由於找不到OpenNI2.dll,無法繼續執行程式碼。重新安裝程式可能會解決此問題”。

配置完環境變數後,重啟電腦即可生效。

2. VS2019中配置pcl1.11.1

1)在VS中新建一個VC++空專案,編譯環境改為X64,Release版本。

2)開啟專案的屬性管理器,在 Release | X64 屬性下 右鍵選擇新增新專案屬性表。

    命名:PCL1_11_X64,然後新增,則可以看到新生成的 PCL1_11_X64.props。

3)開啟PCL1_11_X64屬性表,修改VC++目錄的包含目錄

C:\Program Files\PCL 1.11.1\include\pcl-1.11

C:\Program Files\PCL 1.11.1\3rdParty\Boost\include\boost-1_74

C:\Program Files\PCL 1.11.1\3rdParty\Eigen\eigen3

C:\Program Files\PCL 1.11.1\3rdParty\FLANN\include

C:\Program Files\PCL 1.11.1\3rdParty\Qhull\include

C:\Program Files\PCL 1.11.1\3rdParty\VTK\include\vtk-8.2

C:\Program Files\PCL 1.11.1\3rdParty\OpenNI2\Include

vc++目錄->庫目錄 中新增以下6個目錄:

C:\Program Files\PCL 1.11.1\lib

C:\Program Files\PCL 1.11.1\3rdParty\Boost\lib

C:\Program Files\PCL 1.11.1\3rdParty\FLANN\lib

C:\Program Files\PCL 1.11.1\3rdParty\Qhull\lib

C:\Program Files\PCL 1.11.1\3rdParty\VTK\lib

C:\Program Files\PCL 1.11.1\3rdParty\OpenNI2\Lib

C/C++—>前處理器—>前處理器定義

BOOST_USE_WINDOWS_H

NOMINMAX

_CRT_SECURE_NO_DEPRECATE

C/C++ ->所有選項->SDL檢查 改為否。

 

上面這個是在屬性頁裡改的,最好在專案屬性裡,也把SDL檢查改為“否”,有的時候會報錯。

    專案->屬性->C/C++ ->所有選項->SDL檢查

連結器—>輸入—>附加的依賴項:

    將 PCL 1.11.1\3rdParty\VTK\lib 和 PCL 1.11.1\lib 這兩個資料夾下的lib檔案的release版本新增到附加依賴項中。

 

因上述lib目錄下的檔案太多,為了方便,可以通過批處理把資料夾中的檔名寫入到一個txt中。

//win+r調出“執行”視窗並輸出cmd
//(填自己的路徑)
cd /d D:\programming\PCL 1.11.0\lib 
dir /b *.lib *>0.txt

因為我安裝在 C 盤,使用cmd是許可權不夠,必須要用帶管理員許可權的power shell。輸出檔案可能需要用記事本編輯一下才可以使用

輸入到屬性表裡邊的時候必須一行對應一個lib。

處理 vtk 的lib後,裡面包含了 debug 和 release 兩種版本,需要區分開,帶有 d 或者 gd 的為debug版本

可以採用以下程式碼處理:

#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;
}

到此為止,環境基本配置完畢。

3. 測試程式碼

#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>

int  main(int argc, char** argv)
{
	pcl::PointCloud<pcl::PointXYZ> cloud;   // Fill in the cloud data  
	cloud.width = 5;
	cloud.height = 1;
	cloud.is_dense = false;
	cloud.points.resize(cloud.width * cloud.height);
	for (std::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);
	}
	pcl::io::savePCDFileASCII("test_pcd.pcd", cloud);
	std::cerr << "Saved " << cloud.points.size() << " data points to test_pcd.pcd." << std::endl;
	for (std::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;
	return (0);
}

輸出下圖(數字可能不同),則表示安裝成功!

 

參考連結:

https://www.jb51.net/article/190710.htm 
https://blog.csdn.net/weixin_42059276/article/details/106149359

 

相關文章