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步骤,具体win10、visual studio 2019、pcl1.11.1。 【1】下载安装包 Releases PointCloudLibrary/pcl GitHub 其中,AllInOne是一个包含了PCL库所有模块的单独下载包,方便快速获取整个PCL库,而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解析,我们可以试着新建一个txt文件,在里面加入逗号分隔的信息: a, 1, 15, 30, true 将txt文件后缀改为csv&…...

数据结构之初识树与堆
前言:前面学习了顺序表,队列,栈,链表,我们知道他们都是一种线性表,是一种线性结构,而除此之外,仍有许多我们还没认识的结构,比如树形结构,不同于线性结构&…...
虚拟化技术 — VirtIO 虚拟设备接口标准
目录 文章目录 目录VirtIOVirtIO 虚拟设备接口标准VirtIO 的前后端分层架构标准VirtIO 的数控路径分离架构标准VirtIO 的传输层标准VirtIO 标准在 Linux 中的实现VirtIO VirtIO 由 Rusty Russell 开发,最初是为了支持自己开发的 lguest Hypervisor,其设计目标是在虚拟化环境…...

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

高并发系统的三把利器
目录 1.限流 2.缓存 2.1.缓存的使用场景 3.降级 3.1.什么是降级? 3.2.服务降级方式 4.其他高并发手段 4.1. 集群 4.2.拆分 4.2.1 应用拆分 4.2.2 数据库 4.3. 静态化 4.4.削峰 4.5.限流 5.总结 参考 保护高并发系统的三大利器:限流、熔…...
AppiumWinAppDriver自动化测试 Failed to locate opened application window with appid问题
问题产生原因:1.期望能力选项参数丢失 例如:capabilities.setCapability("appWorkingDir", "C:\\Program Files (x86)\\Tencent\\app")) 某些app需要设置目录属性才可以启动。 问题产生原因: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工具破解无线网络密码 步骤一:虚拟机连接实验需要用到的网卡 步骤二:设置网卡为监听模式 步骤三:使用wlan0mon网卡扫描附近wif…...

C++中的继承、以及赋值兼容转换。
一、继承的概念及定义 继承可以使代码复用,允许在保持原有类特性的基础上进行扩展。 举个例子:就好比我现在要封装老师、学生等这些人的属性和方法,但是这些人都有重复的属性和方法,比如name、age、sex等等,那么我可…...
js浏览器实现简单的实时扫一扫功能
描述:利用vue-qrcode-reader插件实现h5/wap端简单的扫一扫功能 参考文档:https://gruhn.github.io/vue-qrcode-reader/demos/Validate.html官方文档 安装插件 npm i --save vue3-qr-reader 或 yarn add vue3-qr-reader 注意项目运行必须在https下&…...

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

干外包3年,彻底寄了...
先说一下自己的情况,大专生,18年通过校招进入湖南某软件公司,干了接近6年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了6年的功能测试&…...
软考高项论文范文(三)
论信息系统项目的沟通管理 【摘要】(该摘要共313个字符) 本文讨论了ⅹⅹ省社保系统民政统一软件开发项目的沟通管理。该项目是在国家大社会保险政策指导下于2018年10月份正式启动的。该系统为用户提供了优抚安置、救灾救济等十大主要业务功能。在本文中…...
浅谈谈谈OTA召回2023
近日,国家市场监督管理总局发布特斯拉召回公告,一下子掀起了互联网热议,这次召回的范围是在2019年1月12日至2023年4月24日期间国内销售特斯拉汽车(含国产和进口共计110万辆车),在这个召回公告中有两点值得关…...

【GDI+】旋转文本/斜体字
一、需求 想要绘制如下所示的斜体字,45度 二、分析&思路 Graphics类有个 RotateTransform方法,可以传入任意角度的值来旋转画板。但是这个方法的旋转中心是画板的左上角,所以直接单单用这个方法不能满足我们的需求。此外, G…...
python3 面试题总结
Python global 语句的作用lambda 匿名函数好处Python 错误处理Python 内置错误类型简述 any() 和 all() 方法Python 中什么元素为假?提高 Python 运行效率的方法Python 单例模式为什么 Python 不提供函数重载实例方法/静态方法/类方法__new__和 __init __方法的区别…...

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

Java基础面试题突击系列1
👩🏻 作者:一只IT攻城狮 ,关注我不迷路 ❤️《java面试核心知识》突击系列,持续更新… 💐 面试必知必会学习路线:Java技术栈面试系列SpringCloud项目实战学习路线 📝再小的收获x365天…...
go-zero和dtm分布式事务实现
go-zero是一个基于Go语言的微服务开发框架,而DTM(Distributed Transaction Manager)是一个分布式事务管理器,用于实现跨多个微服务的分布式事务。 下面是使用go-zero和DTM实现分布式事务的基本步骤: 安装和配置DTM&am…...

XML Group端口详解
在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...
DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径
目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...

Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
AGain DB和倍数增益的关系
我在设置一款索尼CMOS芯片时,Again增益0db变化为6DB,画面的变化只有2倍DN的增益,比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析: 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖
在Vuzix M400 AR智能眼镜的助力下,卢森堡罗伯特舒曼医院(the Robert Schuman Hospitals, HRS)凭借在无菌制剂生产流程中引入增强现实技术(AR)创新项目,荣获了2024年6月7日由卢森堡医院药剂师协会࿰…...

vulnyx Blogger writeup
信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面,gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress,说明目标所使用的cms是wordpress,访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...

毫米波雷达基础理论(3D+4D)
3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文: 一文入门汽车毫米波雷达基本原理 :https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...
掌握 HTTP 请求:理解 cURL GET 语法
cURL 是一个强大的命令行工具,用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中,cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…...