当前位置: 首页 > news >正文

Windows环境下pcl点云库 安装配置教程

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

【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 右键属性

如下图,右键 >> 属性

4.3 包含目录

如下图,编辑包含目录:

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

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.4 库目录

仿照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.5 添加附加依赖项

需要添加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.6 添加.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 PointCloudspcl::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 pointscloud->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 modelpcl::SampleConsensusModelSphere<pcl::PointXYZ>::Ptrmodel_s(new pcl::SampleConsensusModelSphere<pcl::PointXYZ>(cloud));pcl::SampleConsensusModelPlane<pcl::PointXYZ>::Ptrmodel_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 PointCloudpcl::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);elseviewer = 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博客

相关文章:

Windows环境下pcl点云库 安装配置教程

本文为Windows配置点云库pcl步骤&#xff0c;具体win10、visual studio 2019、pcl1.11.1。 【1】下载安装包 Releases PointCloudLibrary/pcl GitHub 其中&#xff0c;AllInOne是一个包含了PCL库所有模块的单独下载包&#xff0c;方便快速获取整个PCL库&#xff0c;而pdb则…...

岗位分析与可视化系统(三)

五、可视化 5.1薪资页面 在views,编写薪资分析的代码 def salary(request): uname = request.session[username] userInfo = User.objects.get(username=uname) edus, workexps = getSalary.getPageDt() defaultedu = 不限 defaultworkexp = 不限 if request.G…...

unity进阶学习笔记:json和xml

1早期的数据格式 在早期程序开发中一个简单且常用的数据格式为CSV。该格式单纯依靠逗号来分割数据。目前windows的office依然支持CSV解析&#xff0c;我们可以试着新建一个txt文件&#xff0c;在里面加入逗号分隔的信息&#xff1a; a, 1, 15, 30, true 将txt文件后缀改为csv&…...

数据结构之初识树与堆

前言&#xff1a;前面学习了顺序表&#xff0c;队列&#xff0c;栈&#xff0c;链表&#xff0c;我们知道他们都是一种线性表&#xff0c;是一种线性结构&#xff0c;而除此之外&#xff0c;仍有许多我们还没认识的结构&#xff0c;比如树形结构&#xff0c;不同于线性结构&…...

虚拟化技术 — VirtIO 虚拟设备接口标准

目录 文章目录 目录VirtIOVirtIO 虚拟设备接口标准VirtIO 的前后端分层架构标准VirtIO 的数控路径分离架构标准VirtIO 的传输层标准VirtIO 标准在 Linux 中的实现VirtIO VirtIO 由 Rusty Russell 开发,最初是为了支持自己开发的 lguest Hypervisor,其设计目标是在虚拟化环境…...

Dubbo——SpringBoot集成Dubbo(@Autowired和@Reference的区别、Dubbo的服务治理)

Dubbo——原生API实现远程调用_Strine的博客-CSDN博客 在上一篇文章中我们讲了如何使用原生API发起远程调用&#xff0c;显然这种方式肯定是非常麻烦的&#xff0c;因此我们这里就讲如何使用SpringBoot去集成Dubbo将这些配置简化。 生产者服务 添加配置文件 dubbo:applicat…...

高并发系统的三把利器

目录 1.限流 2.缓存 2.1.缓存的使用场景 3.降级 3.1.什么是降级&#xff1f; 3.2.服务降级方式 4.其他高并发手段 4.1. 集群 4.2.拆分 4.2.1 应用拆分 4.2.2 数据库 4.3. 静态化 4.4.削峰 4.5.限流 5.总结 参考 保护高并发系统的三大利器&#xff1a;限流、熔…...

AppiumWinAppDriver自动化测试 Failed to locate opened application window with appid问题

问题产生原因&#xff1a;1.期望能力选项参数丢失 例如&#xff1a;capabilities.setCapability("appWorkingDir", "C:\\Program Files (x86)\\Tencent\\app")) 某些app需要设置目录属性才可以启动。 问题产生原因&#xff1a;2.访问权限不足 例如&…...

渗透测试--6.1.aircrack-ng破解wifi密码

目录 1.Aircrack-ng简介 1.1 airdump-ng 1.2 aireplay-ng 1.3 aircrack-ng 2.Deauth攻击 3.aircrack-ng工具破解无线网络密码 步骤一&#xff1a;虚拟机连接实验需要用到的网卡 步骤二&#xff1a;设置网卡为监听模式 步骤三&#xff1a;使用wlan0mon网卡扫描附近wif…...

C++中的继承、以及赋值兼容转换。

一、继承的概念及定义 继承可以使代码复用&#xff0c;允许在保持原有类特性的基础上进行扩展。 举个例子&#xff1a;就好比我现在要封装老师、学生等这些人的属性和方法&#xff0c;但是这些人都有重复的属性和方法&#xff0c;比如name、age、sex等等&#xff0c;那么我可…...

js浏览器实现简单的实时扫一扫功能

描述&#xff1a;利用vue-qrcode-reader插件实现h5/wap端简单的扫一扫功能 参考文档&#xff1a;https://gruhn.github.io/vue-qrcode-reader/demos/Validate.html官方文档 安装插件 npm i --save vue3-qr-reader 或 yarn add vue3-qr-reader 注意项目运行必须在https下&…...

unity愤怒的小鸟学习制作(二)

终于又开始了啦啦啦&#xff0c;我有一个自己的相机了&#xff0c;真开心&#xff0c;诶嘿 视频链接和素材如下&#xff1a;视频 小鸟的飞出 想要让小鸟在拉开弹弓之后能飞出去&#xff0c;就必须让这个组件失活&#xff0c;如下 所以我们更改脚本内容&#xff0c;加入&#…...

干外包3年,彻底寄了...

先说一下自己的情况&#xff0c;大专生&#xff0c;18年通过校招进入湖南某软件公司&#xff0c;干了接近6年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了6年的功能测试&…...

软考高项论文范文(三)

论信息系统项目的沟通管理 【摘要】&#xff08;该摘要共313个字符&#xff09; 本文讨论了ⅹⅹ省社保系统民政统一软件开发项目的沟通管理。该项目是在国家大社会保险政策指导下于2018年10月份正式启动的。该系统为用户提供了优抚安置、救灾救济等十大主要业务功能。在本文中…...

浅谈谈谈OTA召回2023

近日&#xff0c;国家市场监督管理总局发布特斯拉召回公告&#xff0c;一下子掀起了互联网热议&#xff0c;这次召回的范围是在2019年1月12日至2023年4月24日期间国内销售特斯拉汽车&#xff08;含国产和进口共计110万辆车&#xff09;&#xff0c;在这个召回公告中有两点值得关…...

【GDI+】旋转文本/斜体字

一、需求 想要绘制如下所示的斜体字&#xff0c;45度 二、分析&思路 Graphics类有个 RotateTransform方法&#xff0c;可以传入任意角度的值来旋转画板。但是这个方法的旋转中心是画板的左上角&#xff0c;所以直接单单用这个方法不能满足我们的需求。此外&#xff0c; G…...

python3 面试题总结

Python global 语句的作用lambda 匿名函数好处Python 错误处理Python 内置错误类型简述 any() 和 all() 方法Python 中什么元素为假&#xff1f;提高 Python 运行效率的方法Python 单例模式为什么 Python 不提供函数重载实例方法/静态方法/类方法__new__和 __init __方法的区别…...

select poll epoll有什么区别

select/poll select 实现多路复用的方式是&#xff0c;将已连接的 Socket 都放到一个文件描述符集合&#xff0c;然后调用 select 函数将文件描述符集合拷贝到内核里&#xff0c;让内核来检查是否有网络事件产生&#xff0c;检查的方式很粗暴&#xff0c;就是通过遍历文件描述…...

Java基础面试题突击系列1

&#x1f469;&#x1f3fb; 作者&#xff1a;一只IT攻城狮 &#xff0c;关注我不迷路 ❤️《java面试核心知识》突击系列&#xff0c;持续更新… &#x1f490; 面试必知必会学习路线&#xff1a;Java技术栈面试系列SpringCloud项目实战学习路线 &#x1f4dd;再小的收获x365天…...

go-zero和dtm分布式事务实现

go-zero是一个基于Go语言的微服务开发框架&#xff0c;而DTM&#xff08;Distributed Transaction Manager&#xff09;是一个分布式事务管理器&#xff0c;用于实现跨多个微服务的分布式事务。 下面是使用go-zero和DTM实现分布式事务的基本步骤&#xff1a; 安装和配置DTM&am…...

Java 语言特性(面试系列2)

一、SQL 基础 1. 复杂查询 &#xff08;1&#xff09;连接查询&#xff08;JOIN&#xff09; 内连接&#xff08;INNER JOIN&#xff09;&#xff1a;返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

Linux 文件类型,目录与路径,文件与目录管理

文件类型 后面的字符表示文件类型标志 普通文件&#xff1a;-&#xff08;纯文本文件&#xff0c;二进制文件&#xff0c;数据格式文件&#xff09; 如文本文件、图片、程序文件等。 目录文件&#xff1a;d&#xff08;directory&#xff09; 用来存放其他文件或子目录。 设备…...

mongodb源码分析session执行handleRequest命令find过程

mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程&#xff0c;并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令&#xff0c;把数据流转换成Message&#xff0c;状态转变流程是&#xff1a;State::Created 》 St…...

AtCoder 第409​场初级竞赛 A~E题解

A Conflict 【题目链接】 原题链接&#xff1a;A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串&#xff0c;只有在同时为 o 时输出 Yes 并结束程序&#xff0c;否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

2.Vue编写一个app

1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

Java多线程实现之Callable接口深度解析

Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...

Module Federation 和 Native Federation 的比较

前言 Module Federation 是 Webpack 5 引入的微前端架构方案&#xff0c;允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

Spring AI与Spring Modulith核心技术解析

Spring AI核心架构解析 Spring AI&#xff08;https://spring.io/projects/spring-ai&#xff09;作为Spring生态中的AI集成框架&#xff0c;其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似&#xff0c;但特别为多语…...

九天毕昇深度学习平台 | 如何安装库?

pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子&#xff1a; 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...

佰力博科技与您探讨热释电测量的几种方法

热释电的测量主要涉及热释电系数的测定&#xff0c;这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中&#xff0c;积分电荷法最为常用&#xff0c;其原理是通过测量在电容器上积累的热释电电荷&#xff0c;从而确定热释电系数…...