Windows环境下pcl点云库 安装配置全流程(精简、有效)

news2024/12/24 10:00:07

 本文为Windows配置点云库pcl步骤,具体win10、visual studio 2019、pcl1.11.1

目录

【1】下载安装包

【2】安装

2.1 先执行win64.exe

2.2 解压win64.zip

2.3 OpenNI2安装

【3】设置环境变量

【4】visual studio 项目实战

4.1 新建C++空项目

4.2 包含目录

4.3 库目录

4.4 添加附加依赖项

4.5 添加.cpp并执行显示效果

另:执行可能出现的代码错误解决方法


【1】下载安装包

下载链接:Releases · PointCloudLibrary/pcl · GitHub

 其中,AllInOne是一个包含了PCL库所有模块的单独下载包,方便快速获取整个PCL库,而pdb则是PCL库的调试信息文件,可以在程序崩溃时提供更详细的调试信息来分析解决错误。

【2】安装

2.1 先执行win64.exe

 

  建议自定义安装的位置,按提示操作即可,建议把pcl添加到PATH中。

2.2 解压win64.zip

把解压出来的子文件,全部复制到PCL/bin中

 

2.3 OpenNI2安装

 执行.msi,建议修改路径到该文件夹下;如果已安装过,建议Remove后重新安装,以便后续添加PATH和使用时路径清晰。

 

 安装完毕,该路径如下:

【3】设置环境变量

“此电脑”右键>>属性,如下图添加,再重启电脑:

 

【4】visual studio 项目实战

4.1 新建C++空项目

可设置Debug-x64,并右键 >> 属性进行配置。

4.2 包含目录

如下图,编辑包含目录:

 添加如下路径(不同库的路径层级不同,建议各层级都添加避免包含错误):

D:\tools\PCL 1.11.1\include\pcl-1.11

D:\tools\PCL 1.11.1\include\pcl-1.11\pcl

D:\tools\PCL 1.11.1\3rdParty\Boost\include\boost-1_74\boost

D:\tools\PCL 1.11.1\3rdParty\Eigen\eigen3

D:\tools\PCL 1.11.1\3rdParty\Eigen\eigen3\Eigen

D:\tools\PCL 1.11.1\3rdParty\Eigen\eigen3\unsupported

D:\tools\PCL 1.11.1\3rdParty\Eigen\eigen3\unsupported\Eigen

D:\tools\PCL 1.11.1\3rdParty\FLANN\include

D:\tools\PCL 1.11.1\3rdParty\FLANN\include\flann

D:\tools\PCL 1.11.1\3rdParty\OpenNI2\Include

D:\tools\PCL 1.11.1\3rdParty\Qhull\include

D:\tools\PCL 1.11.1\3rdParty\Qhull\include\libqhull

D:\tools\PCL 1.11.1\3rdParty\Qhull\include\libqhull_r

D:\tools\PCL 1.11.1\3rdParty\Qhull\include\libqhullcpp

D:\tools\PCL 1.11.1\3rdParty\VTK\include

D:\tools\PCL 1.11.1\3rdParty\VTK\include\vtk-8.2

4.3 库目录

仿照4.3包含目录添加库目录:

D:\tools\PCL 1.11.1\lib

D:\tools\PCL 1.11.1\3rdParty\Boost\lib

D:\tools\PCL 1.11.1\3rdParty\FLANN\lib

D:\tools\PCL 1.11.1\3rdParty\OpenNI2\Lib

D:\tools\PCL 1.11.1\3rdParty\Qhull\lib

D:\tools\PCL 1.11.1\3rdParty\VTK\lib

4.4 添加附加依赖项

需要添加PCL和VTK的debug版lib,总共140多个。

可以通过以下批处理的方法:

cd\d D:\tools\PCL 1.11.1\lib  //转到lib目录

dir/b *d.lib *>0.txt                  //把debug用的d.lib后缀名字写到0.txt中

两次操作把这些名字复制粘贴到附加依赖项中。

4.5 添加.cpp并执行显示效果

#include <iostream>
#include <thread>

#include <pcl/console/parse.h>
#include <pcl/point_cloud.h> // for PointCloud
#include <pcl/common/io.h> // for copyPointCloud
#include <pcl/point_types.h>
#include <pcl/sample_consensus/ransac.h>
#include <pcl/sample_consensus/sac_model_plane.h>
#include <pcl/sample_consensus/sac_model_sphere.h>
#include <pcl/visualization/pcl_visualizer.h>

using namespace std::chrono_literals;

pcl::visualization::PCLVisualizer::Ptr
simpleVis(pcl::PointCloud<pcl::PointXYZ>::ConstPtr cloud)
{
	// --------------------------------------------
	// -----Open 3D viewer and add point cloud-----
	// --------------------------------------------
	pcl::visualization::PCLVisualizer::Ptr viewer(new pcl::visualization::PCLVisualizer("3D Viewer"));
	viewer->setBackgroundColor(0, 0, 0);
	viewer->addPointCloud<pcl::PointXYZ>(cloud, "sample cloud");
	viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 3, "sample cloud");
	//viewer->addCoordinateSystem (1.0, "global");
	viewer->initCameraParameters();
	return (viewer);
}

int
main(int argc, char** argv)
{
	// initialize PointClouds
	pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
	pcl::PointCloud<pcl::PointXYZ>::Ptr final(new pcl::PointCloud<pcl::PointXYZ>);

	// populate our PointCloud with points
	cloud->width = 500;
	cloud->height = 1;
	cloud->is_dense = false;
	cloud->points.resize(cloud->width * cloud->height);
	for (pcl::index_t i = 0; i < static_cast<pcl::index_t>(cloud->size()); ++i)
	{
		if (pcl::console::find_argument(argc, argv, "-s") >= 0 || pcl::console::find_argument(argc, argv, "-sf") >= 0)
		{
			(*cloud)[i].x = 1024 * rand() / (RAND_MAX + 1.0);
			(*cloud)[i].y = 1024 * rand() / (RAND_MAX + 1.0);
			if (i % 5 == 0)
				(*cloud)[i].z = 1024 * rand() / (RAND_MAX + 1.0);
			else if (i % 2 == 0)
				(*cloud)[i].z = sqrt(1 - ((*cloud)[i].x * (*cloud)[i].x)
					- ((*cloud)[i].y * (*cloud)[i].y));
			else
				(*cloud)[i].z = -sqrt(1 - ((*cloud)[i].x * (*cloud)[i].x)
					- ((*cloud)[i].y * (*cloud)[i].y));
		}
		else
		{
			(*cloud)[i].x = 1024 * rand() / (RAND_MAX + 1.0);
			(*cloud)[i].y = 1024 * rand() / (RAND_MAX + 1.0);
			if (i % 2 == 0)
				(*cloud)[i].z = 1024 * rand() / (RAND_MAX + 1.0);
			else
				(*cloud)[i].z = -1 * ((*cloud)[i].x + (*cloud)[i].y);
		}
	}

	std::vector<int> inliers;

	// created RandomSampleConsensus object and compute the appropriated model
	pcl::SampleConsensusModelSphere<pcl::PointXYZ>::Ptr
		model_s(new pcl::SampleConsensusModelSphere<pcl::PointXYZ>(cloud));
	pcl::SampleConsensusModelPlane<pcl::PointXYZ>::Ptr
		model_p(new pcl::SampleConsensusModelPlane<pcl::PointXYZ>(cloud));
	if (pcl::console::find_argument(argc, argv, "-f") >= 0)
	{
		pcl::RandomSampleConsensus<pcl::PointXYZ> ransac(model_p);
		ransac.setDistanceThreshold(.01);
		ransac.computeModel();
		ransac.getInliers(inliers);
	}
	else if (pcl::console::find_argument(argc, argv, "-sf") >= 0)
	{
		pcl::RandomSampleConsensus<pcl::PointXYZ> ransac(model_s);
		ransac.setDistanceThreshold(.01);
		ransac.computeModel();
		ransac.getInliers(inliers);
	}

	// copies all inliers of the model computed to another PointCloud
	pcl::copyPointCloud(*cloud, inliers, *final);

	// creates the visualization object and adds either our original cloud or all of the inliers
	// depending on the command line arguments specified.
	pcl::visualization::PCLVisualizer::Ptr viewer;
	if (pcl::console::find_argument(argc, argv, "-f") >= 0 || pcl::console::find_argument(argc, argv, "-sf") >= 0)
		viewer = simpleVis(final);
	else
		viewer = simpleVis(cloud);
	while (!viewer->wasStopped())
	{
		viewer->spinOnce(100);
		std::this_thread::sleep_for(100ms);
	}
	return 0;
}

执行结果:

另:执行可能出现的代码错误解决方法

有两种解决方法:

1、直接跳转到该位置注释;

2、或在预编译器添加 _CRT_SECURE_NO_DEPRECATE

注:部分地方参考:

PCL学习笔记(一)-- Windows下配置安装PCL开发环境_pcl环境配置_看到我请叫我学C++的博客-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/546942.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

c++STL—容器map/multimap

目录 1、map基本概念 1.1、简介 1.2、本质 1.3、优点 1.4、map和multimap区别 2、map构造和赋值 2.1、功能描述 2.2、函数原型 2.3、示例 3、map的大小和交换 3.1、功能描述 3.2、函数原型 3.3、示例 4、map插入和删除 4.1、功能描述 4.2、函数原型 4.3、示例…

【利用AI让知识体系化】解锁异步编程的新世界!

文章目录 I. 前言简介异步在计算机编程中的应用 II. 同步与异步定义与区别同步编程的缺点 III. 异步编程定义应用场景回调函数Promise对象async/await关键字事件循环 IV. 异步编程实例Node.js中使用异步编程异步HTTP请求实现异步文件操作 V. 异步编程的优势VI. 异步编程的挑战与…

Docker 运行 jenkins

概述 虚拟机启动Docker&#xff0c;运行Jenkins&#xff0c;进行代码拉取测试 实现功能&#xff1a; 1. 可链接外网 2. 可拉取仓库代码 3. 基本配置 部署 拉取镜像 docker search jenkins docker pull jenkins/jenkins 创建工作目录 # 创建目录 给工作挂载目录赋予权限 mk…

KingbaseES V8R6 数据库运维案例之 -- root用户securecmd连接'Permission denied'错误

案例分析&#xff1a; 在KingbaseES V8R6数据库在不支持ssh连接的系统环境&#xff0c;可以通过securecmdd服务建立主机之间的通讯&#xff0c;默认securecmdd服务建立用户之间的互信&#xff0c;通过publickey认证建立访问连接。在配置securecmdd服务后&#xff0c;默认kingba…

JavaScript实现计算1-100之间不能被7整除的数的和的代码

以下为实现计算1-100之间不能被7整除的数的和的程序代码和运行截图 目录 前言 一、实现计算1-100之间不能被7整除的数的和 1.1 运行流程及思想 1.2 代码段 1.3 JavaScript语句代码 1.4 运行截图 前言 1.若有选择&#xff0c;您可以在目录里进行快速查找&#xff1b; 2.…

【JavaWeb】--06.Filter、Listener、Ajax、Vue

文章目录 Filter1.概述2.快速入门2.1 开发步骤2.2 代码演示 3.Filter执行流程4. Filter拦截路径配置5.过滤器链5.1 概述5.2 代码演示5.3 问题 Listener1.概述2. 分类3.代码演示 Ajax1.概述1.1作用1.2 同步和异步 2.快速入门2.1 服务端实现2.2 客户端实现2.3 测试 3.axios3.1 基…

MVC 三层架构案例详细讲解

MVC 三层架构案例详细讲解 文章目录 MVC 三层架构案例详细讲解每博一文案1. MVC 概述2. MVC设计思想3. 三层架构4. MVC 与 三层架构的关系&#xff1a;5. 案例举例&#xff1a;用户账户转账5.1 M&#xff08;Model &#xff1a;数据/业务处理层&#xff09;5.2 C (Controller :…

软件测试实验:Web应用测试

目录 前言Web应用的特点实验目的实验内容实验要求实验过程系统测试用例系统测试执行记录系统测试缺陷报告 总结 前言 软件质量保证与测试技术实验是一门旨在培养学生掌握软件测试的基本理论和方法的课程。本实验主要涉及Web应用测试&#xff0c;包括以下几个方面&#xff1a;一…

Scala初学者指南

本文已收录至Github&#xff0c;推荐阅读 &#x1f449; Java随想录 文章目录 Scala跟Java的区别和联系Scala安装Scala中的数据类型Scala语法val和var泛型包导入包对象特质运算符传名参数implicitObject和Class样例类_(下划线)println集合ListMapRange 迭代器Tuple提取器对象流…

代码随想录 哈希表 Java

文章目录 &#xff08;简单&#xff09;242.有效的字母异位词&#xff08;简单&#xff09;383. 赎金信&#xff08;中等&#xff09;49. 字母异位词分组&#xff08;*中等&#xff09;438. 找到字符串中所有字母异位词&#xff08;简单&#xff09;349. 两个数组的交集&#x…

CyberLink的专业视频编辑软件ActionDirector Ultra 3.0版本在win10系统的下载与安装配置教程

目录 前言一、ActionDirector Ultra安装二、使用配置总结 前言 ActionDirector Ultra是CyberLink公司开发的专业视频编辑软件&#xff0c;旨在帮助用户创作高质量的运动和冒险视频。该工具提供了一些先进的特效和编辑工具&#xff0c;让用户能够轻松地剪辑、修剪、调整颜色和添…

队列实现栈(你看我讲的是不是最细的就完了)

最伟大的成就往往起源于最强烈的热情。 -- 诺曼文森特皮尔目录 &#x1f5fc;一.队列实现栈 &#x1f345;二.使用两个队列来模拟实现栈 &#x1f34b;1.栈结构体包含两个队列 &#x1f352;2.创建一个结构体的指针 &#x1f342;3.myStackPush入栈操…

【小沐学Python】Python实现Web图表功能(ECharts.js,Flask)

&#x1f388;&#x1f388;&#x1f388;Python实现Web图表功能系列&#xff1a;&#x1f388;&#x1f388;&#x1f388;1&#x1f388;【Web开发】Python实现Web图表功能&#xff08;D-Tale入门&#xff09;&#x1f388;2&#x1f388;【Web开发】Python实现Web图表功能&a…

编程不头秃,Google「AI程序员」来了,聊天就能敲代码

上周 Google 在 I/O 大会宣布了一个能够辅助编程的聊天机器人 Codey&#xff0c;现在它终于上线 Google Colab 啦&#xff01; &#x1f31f; Codey 是基于 Google 目前最新的大语言模型 PaLM 2 运行&#xff0c;有着强大的语言理解和编程能力。 Codey 有这些功能&#xff1…

【k8s】【ELK】【三】Sidecar容器运行日志Agent

1、日志收集场景分析与说明 对于那些能够将日志输出到本地文件的Pod&#xff0c;我们可以使用Sidecar模式方式运行一个日志采集Agent&#xff0c;对其进行单独收集日志1、首先需要将Pod中的业务容器日志输出至本地文件&#xff0c;而后运行一个Filebeat边车容器&#xff0c;采…

chatgpt赋能Python-python3_绝对值

Python3中的绝对值 在本文中&#xff0c;我们将深入了解Python3中的绝对值&#xff08;Absolute Value&#xff09;以及如何在Python3中使用它。 我将介绍Python3的abs函数&#xff0c;它是一个内置函数&#xff0c;用于计算数字的绝对值。 什么是绝对值&#xff1f; 在数学…

详解MySQL主从复制

目录 1.概述 2.配置使用 2.1.master配置 2.2.slave配置 2.3.认主 2.4.确认认主结果 3.请求分发 3.1.概述 3.2.手动分发 3.2.1.原生JDBC 3.2.2.数据源 3.2.3.中间件 1.概述 在实际的数据密集型应用中&#xff0c;数据库层面往往呈现两个特点&#xff1a; 单点数据…

VONR排查指导分享

不能注册或呼叫到SIP服务器端30秒挂断呼叫的黄金法则咬线或摘机状态单通或无语音收到400 bad request收到413&#xff0c;513 Request Entity Too Large或Message Too Large消息收到408&#xff0c; 480或者487 消息483 - Too Many Hops488 – Not Acceptable Here语音质量和思…

chatgpt赋能Python-python3_9怎么安装

Python 3.9&#xff1a;安装指南 如果你正在学习编程或者已经是一名程序员&#xff0c;那么一定会了解到Python这个编程语言。Python是一种高级编程语言&#xff0c;其强大的设计特点和易于操作的特性使其成为了开发人员的首选。Python 3.9已经发布了&#xff0c;它虽然不是Py…

CSDN官方创作助手InsCode AI 教你分分钟搞定一篇好文章

CSDN官方推出创作助手InsCode AI很多天了&#xff0c;有心人都能发现&#xff0c;在写作界面的右上角多了一个创作助手的浮动按钮&#xff0c;点击后出现如下界面&#xff1a; 现阶段是“限免”状态&#xff0c;不好好利用它来创作&#xff0c;就有点辜负CSDN官方大佬们的良苦用…