Qt PCL学习(一):环境搭建
参考
- (QT配置pcl)PCL1.12.1+QT5.15.2+vs2019+cmake3.22.4+vtk9.1.0
- visual studio2019+Qt5.15.2+PCL1.12.1+vtk9.1.0+cmake3.22.2
本博客用到的所有资源
- 版本一览:Visual Studio 2019 + Qt 5.15.2 + PCL 1.12.1 + VTK 9.1.0
- https://pan.baidu.com/s/1xW7xCdR5QzgS1_d1NeIZpQ?pwd=0000
1. Visual Studio 2019 安装
Visual Studio 2019 官方下载地址
- 双击下载好的 vs_enterprise__663473144.1633489885.exe 文件,勾选下述选项安装即可

2. Qt 5.15.2 安装
2.1 Qt 在线安装
-
Qt 在线安装文件下载:qt-unified-windows-x86-4.3.0-1-online.exe

-
双击下载好的 qt-unified-windows-x86-4.3.0-1-online.exe,自行注册并登录 Qt 账户,在选择组件界面,勾选下图所示组件,然后一直点击下一步安装即可

2.2 Qt-VS 2019 插件安装
-
Qt-Visual Studio 2019 插件下载:qt-vsaddin-msvc2019-2.8.1-rev.06.vsix

-
双击下载好的 qt-vsaddin-msvc2019-2.8.1-rev.06.vsix 直接安装即可

-
在 Visual Studio 2019 中添加 Qt 路径,打开 Visual Studio 2019 新建一个控制台项目,点击下图一所示选项,在下图二中 Version 和 Path 中添加所示内容(具体内容根据自己的情况修改,图示 D:\Qt6 是本人新建文件夹错了,实则安装的是 Qt5)


- Visual Studio 2019 创建 Qt 项目测试(下图三:将 .ui 文件打开方式设置为 Qt 默认打开)



3. PCL 1.12.1 安装
-
双击下载的 PCL-1.12.1-AllInOne-msvc2019-win64.exe 文件安装即可,切记安装路径不能有中文和空格,本文安装路径为 D:\PCL1.12.1,建议与本文一致,安装完得到下图所示(将网盘中的 pcl1.12.1.pri 文件复制到该目录)

-
安装 OpenNI2,先双击 remove,再双击安装


-
将网盘中的 pcl-1.12.1-pdb-msvc2019-win64.zip 文件解压后的内容全选复制到 D:\PCL1.12.1\bin 目录下

-
path 环境变量设置:添加下图红框所示环境变量,如果不放心,可参考这篇博客添加更多环境变量

4. CMake 3.22.4 安装
- 双击下载的 cmake-3.22.4-windows-x86_64.msi 直接安装即可,安装步骤简单此处不赘述

5. VTK 9.1.0 安装
5.1 VTK 简介
- VTK(Visualization Toolkit,可视化工具包)是一个开源、跨平台、可自由获取、支持并行处理的图形应用函数库
- VTK 是一个用于可视化和图形处理的强大库,它提供了丰富的功能和算法,可用于创建和渲染 2D 和 3D 图形,并进行各种可视化和图形处理操作,VTK 库可以用于处理各种类型的数据,包括点云数据
- PCL 是一个专门用于处理点云数据的库,它提供了一组算法和工具,可用于点云的采集、过滤、配准、分割、特征提取等任务,PCL 库的目标是提供一个全面而高效的点云处理解决方案
- 在 PCL 中,有一个模块(pcl_visualization)使用了 VTK 库的功能,用于可视化点云数据和结果,通过使用 VTK 库,PCL 可以提供强大的点云可视化功能
VTK 提供了强大的可视化和图形处理功能,而 PCL 则专注于点云数据的处理,但在某些功能上使用了 VTK 库来实现点云的可视化
5.2 VTK 安装方法一:直接替换
- 下载网盘中编译好的 VTK.rar 文件,解压后直接替换 D:\PCL1.12.1\3rdParty 目录下的 VTK 文件夹即可
5.3 VTK 安装方法二:自行编译
- 参考视频:QT配置pcl
6. Qt PCL 测试案例
-
打开 Qt 5.15.2 新建 Qt Widgets 项目 show(qmake),选择 Qt 5.15.2 MSVC2019 64bit 编译套件

-
在 show.pro 文件添加下行代码
QT += core guigreaterThan(QT_MAJOR_VERSION, 4): QT += widgets // 添加下行代码(根据自己安装目录进行修改) include(D:/PCL1.12.1/pcl1.12.1.pri) -
mainwindow.h
#ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #include <QWindow> #include <QHBoxLayout>#include <vtkGenericOpenGLRenderWindow.h> #include <pcl/point_cloud.h> #include <pcl/point_types.h> #include <pcl/io/pcd_io.h> #include <pcl/visualization/pcl_visualizer.h>typedef pcl::PointXYZ PointT; typedef pcl::PointCloud<PointT> PointCloudT; typedef pcl::visualization::PCLVisualizer PCLViewer; typedef std::shared_ptr<PointCloudT> PointCloudPtr;QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACEclass MainWindow : public QMainWindow {Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private:Ui::MainWindow *ui;PointCloudPtr cloudptr;PCLViewer::Ptr cloud_viewer; }; #endif // MAINWINDOW_H -
mainwindow.cpp
#include "mainwindow.h" #include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) {setWindowTitle("PCL Test");ui->setupUi(this);// 创建 PCLViewer 对象并设置窗口标题cloud_viewer.reset(new PCLViewer("Viewer"));cloud_viewer->setShowFPS(false);// 将 cloud_viewer 的渲染窗口嵌入到 QWidget 中auto viewerWinId = QWindow::fromWinId((WId)cloud_viewer->getRenderWindow()->GetGenericWindowId());QWidget *widget = QWidget::createWindowContainer(viewerWinId, nullptr);// 创建 QVBoxLayout 对象并将 QWidget 添加到其中QVBoxLayout* mainLayout = new QVBoxLayout;mainLayout->addWidget(widget);centralWidget()->setLayout(mainLayout);// 创建 PointCloudT 智能指针并加载点云数据// office.pcd 点云文件在网盘中已提供cloudptr.reset(new PointCloudT);pcl::io::loadPCDFile("D:/office.pcd", *cloudptr);// 设置颜色处理器,将点云数据添加到 cloud_viewer 中const std::string axis ="z";pcl::visualization::PointCloudColorHandlerGenericField<PointT> color_handler(cloudptr, axis);cloud_viewer->addPointCloud(cloudptr, color_handler, "cloud"); }MainWindow::~MainWindow() {delete ui; }

相关文章:
Qt PCL学习(一):环境搭建
参考 (QT配置pcl)PCL1.12.1QT5.15.2vs2019cmake3.22.4vtk9.1.0visual studio2019Qt5.15.2PCL1.12.1vtk9.1.0cmake3.22.2 本博客用到的所有资源 版本一览:Visual Studio 2019 Qt 5.15.2 PCL 1.12.1 VTK 9.1.0https://pan.baidu.com/s/1xW7xCdR5QzgS1_d1NeIZpQ?pw…...
代码随想录算法训练营第四十二天 | 416. 分割等和子集
题目链接:416. 分割等和子集 文章讲解:代码随想录 416. 分割等和子集讲解 视频讲解:动态规划之背包问题,这个包能装满吗?| LeetCode:416.分割等和子集 思路和解法 题目: 给你一个 只包含正整…...
Spring GateWay
概述简介 能干什么 反向代理 鉴权 流量控制 熔断 日志监控 Spring Cloud Gateway 与Zuul的区别 在SpringCloud Finchley正式版之前,Spring Cloud推荐的网关是 Netflix提供的Zuul: 1、Zuul 1.x,是一个基于阻塞Ⅳ/O的APl Gateway 2、Zuul 1.x基于Servl…...
介绍一个关于 JSON 可视化的网站
最近在看到一个比较好玩的网站,可以将 JSON以可视化的方式展现出现,比如存在一下JSON数据: {"id": "f3bbc3bc-9f34-4bf7-8a0f-7e6f6e6fbb9a","isActive": false,"age": 25,"name": "…...
系统架构设计师-22年-上午答案
系统架构设计师-22年-上午答案 更多软考资料 https://ruankao.blog.csdn.net/ 1 ~ 10 1 云计算服务体系结构如下图所示,图中①、②、③分别与 SaaS PaaS Iaas相对应,图中①、②、③应为(1) #mermaid-svg-xqMbIVMC8pWrne2L {font-family:"trebuch…...
2024 年改变行业的人工智能主要趋势
1、导读 当我们迈入 2024 年时,了解人工智能趋势至关重要。它们不仅仅涉及技术进步;还涉及技术进步。它们意味着我们解决问题、做出决策和展望未来的方式发生了转变。本文旨在探索这些变革趋势,并强调人工智能如何不断突破可能性的界限&…...
【Linux Day15 TCP网络通讯】
TCP网络通讯 TCP编程流程 接口介绍 socket()方法是用来创建一个套接字,有了套接字就可以通过网络进行数据的收发。创建套接字时要指定使用的服务类型,使用 TCP 协议选择流式服务(SOCK_STREAM)。 **bind()方法是用来指定套接字使…...
力扣:78. 子集
回溯解法思路: 1.跟前面的组合题目有相同的点,主要区别在于:组合题目是遍历到符合条件的组合时加入li1集合中,子集题目是每递归一次就要把结果加入到li1集合中,并遍历但nums数组的最后。其他点和组合问题一样。 clas…...
(29)数组异或操作
文章目录 每日一言题目解题思路方法一方法二 代码方法一方法二 结语 每日一言 泉涸,鱼相与处于陆,相呴以湿,相濡以沫,不如相忘于江湖。 --庄子内篇大宗师 题目 题目链接:数组异或操作 给你两个整数,n 和…...
mac检查CPU温度和风扇速度软件:Macs Fan Control Pro 1.5.17中文版
Macs Fan Control Pro for Mac是一款专业的电脑风扇控制工具,旨在帮助Mac用户有效控制电脑的风扇速度,提高电脑的运行效率和稳定性。 软件下载:Macs Fan Control Pro 1.5.17中文版 该软件支持多种风扇控制模式和预设方案,用户可以…...
数据结构——单链表详解
目录 前言 一.什么是链表 1.概念 编辑 2.分类 二.单链表的实现(不带头单向不循环链表) 2.1初始化 2.2打印 2.3创建新节点 2.4头插、尾插 2.5头删、尾删 2.6查找 2.7在指定位置之前插入 2.8在指定位置之后插入 2.9删除pos位置 2.10删除pos之后的 2.11销毁链表…...
Unity接入GVoice腾讯实时语音
Unity接入GVoice腾讯实时语音 一、介绍二、注册GVoice创建项目语音服务1.创建项目2.申请语音权限3.项目管理查看SDK初始化的一些参数和基本信息4.GVoice检测 三、SDK下载SDK是分为两种类型:独立版集成板 SDK放入Unity工程中 四、语音代码写法五、GVoice踩坑语音权限…...
【Spring基础】从0开始学习Spring(2)
前言 在上篇文章,我已经讲了Spring中最核心的知识点:IoC(控制反转)以及DI(依赖注入)。这篇文章,我将讲一下关于Spring框架中的其它比较琐碎但是又还是挺重要的知识点,因此ÿ…...
cesium mapboxgl+threebox glb 朝向问题
一、3Dbuilder打开glb 二、cesium在pitch和heading都为0的情况下,不设置模型的朝向 三、mapboxglthreebox在pitch和bearing都为0的情况下,不设置模型的朝向 四、对于地图默认视角,cesium设置pitch-90、heading0的时候和mapboxglthreebox设置p…...
LeetCode 打家劫舍
198. 打家劫舍 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个…...
单片机的50个电路
单片机 电源 声音模块 收音机 485 蓝牙 光耦 can 光敏电阻 单片机 矩阵 单片机电路 时钟 ADC 接口电路 红外发射 显示模块 红外接收 蜂鸣器驱动 流水灯 usb供电 烧录电路 数码管 EEPROM LCD1602电路 数码管 max485 红外开关 译码器 移位寄存器 步进电机控制 复位电路 下载电路 …...
JVM 性能调优- 五种内存溢出(5)
在介绍之前先简单介绍下 直接内存(Direct Memory)和堆内存(Heap Memory): 关系: 直接内存并不是Java虚拟机的一部分,它是通过Java的NIO库中的ByteBuffer来分配和管理的。直接内存通常由操作系统的本地内存(Native Memory)提供支持。堆内存是Java虚拟机的一部分,用于存…...
【SQL高频基础】1141.查询近30天活跃用户数
题目: 表:Activity ------------------------ | Column Name | Type | ------------------------ | user_id | int | | session_id | int | | activity_date | date | | activity_type | enum | ------------------------…...
基于spring cloud alibaba的微服务平台架构规划
平台基础能力规划(继续完善更新…) 一、统一网关服务(独立服务) 二、统一登录鉴权系统管理(独立服务) 1.统一登录 2.统一鉴权 3.身份管理 用户管理 角色管理 业务系统和菜单管理 部门管理 岗位管理 字典管…...
leetcode(滑动窗口)3.无重复字符的最长字串(C++详细题解)DAY2
文章目录 1.题目示例提示 2.解答思路3.实现代码结果 4.总结 1.题目 给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。 示例 示例 1: 输入: s “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。 示…...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...
在WSL2的Ubuntu镜像中安装Docker
Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包: for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...
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…...
初探Service服务发现机制
1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能:服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源…...
招商蛇口 | 执笔CID,启幕低密生活新境
作为中国城市生长的力量,招商蛇口以“美好生活承载者”为使命,深耕全球111座城市,以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子,招商蛇口始终与城市发展同频共振,以建筑诠释对土地与生活的…...
MySQL 8.0 事务全面讲解
以下是一个结合两次回答的 MySQL 8.0 事务全面讲解,涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容,并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念(ACID) 事务是…...
LRU 缓存机制详解与实现(Java版) + 力扣解决
📌 LRU 缓存机制详解与实现(Java版) 一、📖 问题背景 在日常开发中,我们经常会使用 缓存(Cache) 来提升性能。但由于内存有限,缓存不可能无限增长,于是需要策略决定&am…...
MySQL 部分重点知识篇
一、数据库对象 1. 主键 定义 :主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 :确保数据的完整性,便于数据的查询和管理。 示例 :在学生信息表中,学号可以作为主键ÿ…...
「全栈技术解析」推客小程序系统开发:从架构设计到裂变增长的完整解决方案
在移动互联网营销竞争白热化的当下,推客小程序系统凭借其裂变传播、精准营销等特性,成为企业抢占市场的利器。本文将深度解析推客小程序系统开发的核心技术与实现路径,助力开发者打造具有市场竞争力的营销工具。 一、系统核心功能架构&…...
离线语音识别方案分析
随着人工智能技术的不断发展,语音识别技术也得到了广泛的应用,从智能家居到车载系统,语音识别正在改变我们与设备的交互方式。尤其是离线语音识别,由于其在没有网络连接的情况下仍然能提供稳定、准确的语音处理能力,广…...

