PCL学习笔记(一)-- Windows下配置安装PCL开发环境

1)准备工作

(1)获取All in one安装包,PCL提供了配置为Visual Studio的32位和64位下的该安装包,该包包含类PCL中所使用全部第三方编译包,除了QT编译包。

(2)获取All in one包对应的PDB文件包,该包用于后期单步调试时使用。

(3)获取PCL源码包。

(4)安装开发工具Visual Studio编译器和CMake开发工具,需要CMake版本大于2.8.3,主要考虑到PCL中用到了高版本的一些宏定义,低版本并兼容。

  All in one安装包和PDB安装包都可以在git上进行下载:

  Releases · PointCloudLibrary/pcl · GitHub

  源码也可以在git上进行下载或者克隆:

  GitHub - PointCloudLibrary/pcl: Point Cloud Library (PCL)

  (ps. 再次吐槽公司网络!!!!!巨慢

  (ps:我在网盘里放了相关的安装包以及一些点云文件,如果需要的话可以私聊邮箱

  顺便说一下我的安装环境是:VS2019 + PCL 1.12.0

2)开始安装

  (1)下载好两个文件以后,先安装All in one:

   下载路径的话,选择D盘,会自动生成一个下载路径:D:\PCL 1.12.0

   (2)完成安装以后需要去:D:\PCL 1.12.0\3rdParty\OpenNI2 查看一下OpenNI有没有安装到这个文件夹。因为默认安装的路径是C盘,如果发现文件夹里只有一个NI的安装包的话,就打开安装程序:

   点击Remove,重新安装并选择路径为:D:\PCL 1.12.0\3rdParty\OpenNI2,安装完成以后文件夹里就会有这些文件:

  (3)将下载的PDB文件,解压到:D:\PCL 1.12.0\bin 文件夹下:

  (4)设置环境变量:

  依次点击:高级系统设置--高级--环境变量--用户Path--新建--输入相应的环境变量--不要忘记点确定!

  环境变量如下:

%PCL_ROOT%\3rdParty\FLANN\bin
%PCL_ROOT%\3rdParty\VTK\bin
%OPENNI2_REDIST64%
%OPENNI2_LIB64%
%OPENNI2_INCLUDE64%

  注意:环境变量输入好以后,一定要点击确定,每个确定都要点,配置好环境后重启电脑。

 3)Visual Studio环境配置

  (1)新建一个C++空项目:

  解决方案设置为Debug,基于X64平台:

  (2)在源文件中新建一个C++源文件:

  (3)右键之前新建的项目(注意不是源文件),选择:属性--配置属性--调试--环境--编辑,添加如下的环境(需要注意这些环境路径需要根据你下载的版本,以及下载的文件所在位置进行调整):

PATH=D:\PCL 1.12.0\\bin;D:\PCL 1.12.0\\3rdParty\FLANN\bin;D:\PCL 1.12.0\\3rdParty\VTK\bin;D:\PCL 1.12.0\\3rdParty\OpenNI2\Tools

  接着,选择:C/C++--语言--符合模式--设置为否:

  最后,设置:C/C++--所有选项--SDL检查--设置为否:

  一定要记得点应用!!!再点确定呀!!!!

4)配置PCL 1.12.0属性表

为了方便使用,选择添加属性表的方式进行PCL 1.12.0的配置,这需要将属性表的SDL检查也设置为否,否则会出现报错!  

  (1)显示属性管理器:视图--其他窗口--属性管理器

  (2)在属性管理器里找到Debug|x64,右键打开后选择新建新的项目属性表:

  (3)设置名称为:PCL1.12.0.props

  (4)右键新建的属性表,打开属性:C/C++ -- 所有选项 -- SDL检查 -- 设置为否:

  (5)选择VC++目录 -- 包含目录 -- 编辑 --添加新的目录如下(这些目录可能会根据你安装的版本和路径有所变动,注意调整):

安装的目录如下:

D:\PCL 1.12.0\include\pcl-1.12
D:\PCL 1.12.0\3rdParty\Boost\include\boost-1_76
D:\PCL 1.12.0\3rdParty\Eigen\eigen3
D:\PCL 1.12.0\3rdParty\FLANN\include
D:\PCL 1.12.0\3rdParty\Qhull\include
D:\PCL 1.12.0\3rdParty\VTK\include\vtk-9.0
D:\PCL 1.12.0\3rdParty\OpenNI2\Include

  (6)选择VC++目录 -- 库目录 -- 编辑 --添加新的目录如下(这些目录可能会根据你安装的版本和路径有所变动,注意调整):

  安装库如下:

D:\PCL 1.12.0\lib
D:\PCL 1.12.0\3rdParty\Boost\lib
D:\PCL 1.12.0\3rdParty\FLANN\lib
D:\PCL 1.12.0\3rdParty\Qhull\lib
D:\PCL 1.12.0\3rdParty\OpenNI2\Lib
D:\PCL 1.12.0\3rdParty\VTK\lib

  (7)选择C/C++ -- 预处理器 -- 预处理器定义 -- 编辑 --添加预处理器定义如下:

  预处理器定义如下:

BOOST_USE_WINDOWS_H
NOMINMAX
_CRT_SECURE_NO_DEPRECATE

  (8)重要的操作来了:批量获取附加依赖项

  首先,快捷键win+r调出运行窗口,输入cmd,在cmd窗口输入以下代码:

cd/d D:\PCL 1.12.0\3rdParty\VTK\lib
dir/b *.lib *>0.txt

  上述代码可以将VTK中的所有lib文件以txt的形式输出到0.txt文件中:

  注意,PCL和VTK的库都需要进行调取: 

  注意:读取出来的链接库包含了Release版本和Debug版本(带d的),这里用Debug版本的链接库。

  用以下代码可以将Release版本和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;
}

  或者也可以选择全部复制到依赖项里面,然后删掉Release版本的链接库。

  完成属性表的配置后,记得保存属性表,以后在使用时只要,重复Visual Studio的配置,然后添加现有的属性表PCL 1.12.1.props即可。

5)代码测试

  输入以下代码进行测试:

#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, 0);  //设置背景颜色为黑色
	// 对点云着色可视化 (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");

	// 等待直到可视化窗口关闭
	while (!viewer->wasStopped())
	{
		viewer->spinOnce(100);
		boost::this_thread::sleep(boost::posix_time::microseconds(1000));
	}

	return (0);
}

  输出结果如下:

 那么在windows下搭建PCL环境就完成了!

  • 40
    点赞
  • 138
    收藏
    觉得还不错? 一键收藏
  • 32
    评论
评论 32
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值