PCL学习笔记(一)-- Windows下配置安装PCL开发环境_windows cmake 安装pcl库-程序员宅基地

技术标签: 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环境就完成了!

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_45006390/article/details/118928500

智能推荐

Python常用组件、命令大总结(持续更新)_セックス邀请码-程序员宅基地

文章浏览阅读1.5w次,点赞15次,收藏134次。Python后端开发常用组件、命令(干货)持续更新中…1、生成6位数字随机验证码import randomimport stringdef num_code(length=6): """ 生成长度为length的数字随机验证码 :param length: 验证码长度 :return: 验证码 """ return ''.jo....................._セックス邀请码

C#实现短信猫通信(无开发包)-程序员宅基地

文章浏览阅读99次。因为项目的需要,简简单单的做了个DEMO,能够打电话和发送短信,不是很完善,都可以举一反三! 代码using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows..._csca: "+8613010314500",145

Nginx配置-程序员宅基地

文章浏览阅读4.4w次,点赞38次,收藏344次。Nginx配置一、nginx常用配置命令二、nginx配置文件(一)、第一部分:全局块(二)、第二部分:events块(三)、第三部分:http块1、http全局块2、server块三级目录一、nginx常用配置命令配置命令路径/usr/local/nginx/sbin查看nginx版本./nginx -v停止nginx服务./nginx -s stop启动nginx服务./nginx重新加载nginx,适用于当nginx.conf配置文件修改后,使用下面命令可以使得配置文件生效_nginx配置

使用VS2017编译Boost库(MSVC)_vs2017 msvc-程序员宅基地

文章浏览阅读3.4k次,点赞4次,收藏16次。1、首先得拿到VS2017,Boost,下载链接:Visual Studio Community 2017:http://xz.cncrk.com:8080/soft/keygen/visual studio 2017.rarboost_1_71_0.zip:https://dl.bintray.com/boostorg/release/1.71.0/source/boost_1_..._vs2017 msvc

前端技术搭建飞机大战小游戏(内含源码)_前端小游戏代码-程序员宅基地

文章浏览阅读7.7w次,点赞177次,收藏116次。上周我们实通过前端基础实现了弹珠游戏,当然很多伙伴再评论区提出了想法,后续我们会考虑实现的,今天还是继续按照我们原定的节奏来带领大家完成一个飞机大战游戏,功能也比较简单简单,也是想借助这样一个简单的功能,然后来帮助大家了解我们JavaScript在前端中的作用, 在前面的文章当中我们也提及到我们在本系列的专栏是循序渐进从简单到复杂的过程,后续会带领大家用前端实现翻卡片、扫雷、贪吃蛇等有趣的小游戏,纯前端语言实现,都会陆续带给大家。欢迎大家订阅我们这份前端小游戏的专栏。_前端小游戏代码

抖音引流跳转到微信加好友?免费教你创建一个链接!_抖音跳转加微信程序源码-程序员宅基地

文章浏览阅读770次,点赞9次,收藏8次。为了降低大家的门槛,可以使用开源的【引流宝】快速创建一个链接,这个链接生成的二维码,用抖音扫码,然后分享出去就是一张卡片,点击卡片就跳转到微信。在抖音想要跳转到微信,现在常规的做法就是通过微信小程序的Url Scheme跳转到微信并打开小程序指定的页面,这个已经有非常成熟的方案。你可以下载这个开源软件的代码,自行搭建引流宝系统,然后创建抖音跳转到微信的卡片即可。_抖音跳转加微信程序源码

随便推点

华北电力大学微型计算机,华北电力大学 微机原理与应用-程序员宅基地

文章浏览阅读270次。《微机原理与应用》教程介绍《微机原理及应用》课程是工科专业的工程技术基础课程,为非计算机专业学生开设。本课程任务是使学生从理论和实践上掌握微型计算机的基本组成,工作原理,典型通用接口部件的功能及其与系统的连接,建立微机系统的基本概念,并在此基础上使学生具有微机应用系统软件、硬件开发的初步能力。为今后应用计算机从事专业研究和解决工程实际问题打好基础。课程的主要内容为:微型计算机基础知识、微处理器、8..._华北电力大学 微机实验

java科普网站计算机毕业设计MyBatis+系统+LW文档+源码+调试部署-程序员宅基地

文章浏览阅读118次。springboot基于B_S架构的疫情包联信息管理系统的设计与实现。JSP基于Web的在线文献查阅系统的设计与实现sqlserver。springboot基于微服务架构的图书借阅系统的设计与实现。JSP婚纱影楼管理系统的设计与实现sqlserver。JSP客户关系管理系统的设计与实现sqlserver。JSP企业进销存系统的设计与实现SQLServer。ssm基于Java的幼儿早教系统软件的设计与实现。ssm基于Vue和mysql的智能图书管理系统。基于SSM框架的校园爱心公益平台的设计与实现。

【王道数据结构】第二章 | 线性表_王道数据结构第二章csdn-程序员宅基地

文章浏览阅读1k次,点赞8次,收藏5次。【王道数据结构】第二章 | 线性表 线性表的定义 线性表的基础操作 顺序表的定义 顺序表的基本操作_王道数据结构第二章csdn

手写openFeign_手写opefeign客户端-程序员宅基地

文章浏览阅读873次,点赞3次,收藏3次。总的来说,OpenFeign简化了基于RESTful的HTTP请求的创建和使用过程,帮助你构建更加简洁、可维护、可扩展的微服务应用。与Spring Cloud集成:OpenFeign是Spring Cloud的一部分,因此与Spring Cloud的其他组件(如Eureka、Hystrix等)无缝集成,形成完整的微服务生态系统。整合服务发现:OpenFeign可以与Eureka等服务发现组件集成,使得你可以通过服务名来访问其他微服务,而无需硬编码服务的具体地址。被调用方和应用级别的被调用方一样。_手写opefeign客户端

metasploit 快速入门(二)信息收集和扫描-续_elasticsearch unrestricted access information disc-程序员宅基地

文章浏览阅读1.7k次。目录一、与Nessus结合二、与NeXpose结合三、与OpenVAS结合一、与Nessus结合到目前为止,我们已经了解了端口扫描的基础知识,以及学会了Nmap的使用。通过其他一些工具的学习,进一步提高了扫描和信息收集的技术。在接下来的小节中,我们将介绍其他几种扫描目标可用服务和端口的工具,这些工具还可以帮助我们确定特定服务和端口可能存在的漏洞类型。让我们开始漏洞扫描之旅。..._elasticsearch unrestricted access information disclosure

语义Web和本体开发相关技术-程序员宅基地

文章浏览阅读155次。摘自:http://iMarine.blog.163.com/在技术实现方面,语义Web和本体理论的研究日趋成熟,已经有许多成熟的工具或程序接口,诸如Jena、OWL API等API是系统实现的关键技术。这里介绍系统的可行性分析以及系统开发设计的关键技术。1 JenaJena[69]是来自于惠普实验室语义Web研究项目的开放资源,是用于创建语义Web应用..._java org.semanticweb