VS+Qt+C++点云PCL三维显示编辑系统

程序示例精选
VS+Qt+C++点云PCL三维显示编辑系统
如需安装运行环境或远程调试,见文章底部个人QQ名片,由专业技术人员远程协助!

前言

这篇博客针对《VS+Qt+C++点云PCL三维显示编辑系统》编写代码,代码整洁,规则,易读。 学习与应用推荐首选。


文章目录

一、所需工具软件
二、使用步骤
       1. 主要代码
       2. 运行结果
三、在线协助

一、所需工具软件

       1. VS2019,Qt
       2. C++

二、使用步骤

代码如下(示例):

#include "PointCloudVision.h"
#include <QFileDialog>
#include <QFile>
#include <QMessageBox>
#include <QColorDialog>PointCloudVision::PointCloudVision(QWidget* parent): QMainWindow(parent)
{ui.setupUi(this);//初始化init();
}//获取两个点平行于坐标轴的最短距离
double getMinValue(PointT p1, PointT p2);//获取两个点平行于坐标轴的最长距离
double getMaxValue(PointT p1, PointT p2);//初始化
void PointCloudVision::init()
{//点云初始化m_currentCloud.reset(new PointCloudT);//可视化对象初始化viewer.reset(new pcl::visualization::PCLVisualizer("viewer", false));viewer->addPointCloud(m_currentCloud, "cloud");//设置VTK可视化窗口指针ui.qvtkWidget->SetRenderWindow(viewer->getRenderWindow());//设置窗口交互,窗口可接受键盘等事件viewer->setupInteractor(ui.qvtkWidget->GetInteractor(), ui.qvtkWidget->GetRenderWindow());//添加坐标轴viewer->addCoordinateSystem();//ui.qvtkWidget->update();//槽函数connect(&heightRampDlg, SIGNAL(setHeightRamp(int, double)), this, SLOT(setHeightRamp(int, double)));}//打开点云
void PointCloudVision::on_action_open_triggered()
{init();QString fileName = QFileDialog::getOpenFileName(this, "Open PointCloud", ".", "Open PCD files(*.pcd)");if (!fileName.isEmpty()){std::string file_name = fileName.toStdString();pcl::PCLPointCloud2 cloud2;Eigen::Vector4f origin;Eigen::Quaternionf orientation;int pcd_version;int data_type;unsigned int data_idx;int offset = 0;pcl::PCDReader rd;rd.readHeader(file_name, cloud2, origin, orientation, pcd_version, data_type, data_idx);if (data_type == 0){pcl::io::loadPCDFile(fileName.toStdString(), *m_currentCloud);}else if (data_type == 2){pcl::PCDReader reader;reader.read<pcl::PointXYZ>(fileName.toStdString(), *m_currentCloud);}viewer->addCoordinateSystem();viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 3, "cloud");viewer->updatePointCloud(m_currentCloud, "cloud");// 获取点云数据的最小和最大坐标值pcl::getMinMax3D(*m_currentCloud, p_min, p_max);viewer->resetCamera();ui.qvtkWidget->update();}
}//重设视角
void PointCloudVision::on_action_reset_triggered()
{if (!m_currentCloud->empty()){viewer->resetCamera();ui.qvtkWidget->update();}
}//俯视图
void PointCloudVision::on_action_up_triggered()
{if (!m_currentCloud->empty()){viewer->setCameraPosition(0.5 * (p_min.x + p_max.x), 0.5 * (p_min.y + p_max.y), p_max.z + 2 * maxLen, 0.5 * (p_min.x + p_max.x), 0.5 * (p_min.y + p_max.y), 0, 0, 1, 0);viewer->updatePointCloud(m_currentCloud, "cloud");ui.qvtkWidget->update();on_action_reset_triggered();}
}//前视图
void PointCloudVision::on_action_front_triggered()
{if (!m_currentCloud->empty()){viewer->setCameraPosition(0.5 * (p_min.x + p_max.x), p_min.y - 2 * maxLen, 0.5 * (p_min.z + p_max.z), 0.5 * (p_min.x + p_max.x), 0, 0.5 * (p_min.z + p_max.z), 0, 0, 1);viewer->updatePointCloud(m_currentCloud, "cloud");ui.qvtkWidget->update();on_action_reset_triggered();}
}//左视图
void PointCloudVision::on_action_left_triggered()
{if (!m_currentCloud->empty()){viewer->setCameraPosition(p_min.x - 2 * maxLen, 0.5 * (p_min.y + p_max.y), 0.5 * (p_min.z + p_max.z), 0, 0.5 * (p_min.y + p_max.y), 0.5 * (p_min.z + p_max.z), 0, 0, 1);viewer->updatePointCloud(m_currentCloud, "cloud");ui.qvtkWidget->update();on_action_reset_triggered();}
}//后视图
void PointCloudVision::on_action_back_triggered()
{if (!m_currentCloud->empty()){viewer->setCameraPosition(0.5 * (p_min.x + p_max.x), p_max.y + 2 * maxLen, 0.5 * (p_min.z + p_max.z), 0.5 * (p_min.x + p_max.x), 0, 0.5 * (p_min.z + p_max.z), 0, 0, 1);viewer->updatePointCloud(m_currentCloud, "cloud");ui.qvtkWidget->update();on_action_reset_triggered();}
}//右视图
void PointCloudVision::on_action_right_triggered()
{if (!m_currentCloud->empty()){viewer->setCameraPosition(p_max.x + 2 * maxLen, 0.5 * (p_min.y + p_max.y), 0.5 * (p_min.z + p_max.z), 0, 0.5 * (p_min.y + p_max.y), 0.5 * (p_min.z + p_max.z), 0, 0, 1);viewer->updatePointCloud(m_currentCloud, "cloud");ui.qvtkWidget->update();on_action_reset_triggered();}
}//底视图
void PointCloudVision::on_action_bottom_triggered()
{if (!m_currentCloud->empty()){viewer->setCameraPosition(0.5 * (p_min.x + p_max.x), 0.5 * (p_min.y + p_max.y), p_min.z - 2 * maxLen, 0.5 * (p_min.x + p_max.x), 0.5 * (p_min.y + p_max.y), 0, 0, 1, 0);viewer->updatePointCloud(m_currentCloud, "cloud");ui.qvtkWidget->update();on_action_reset_triggered();}
}//前轴测
void PointCloudVision::on_action_frontIso_triggered()
{if (!m_currentCloud->empty()){viewer->setCameraPosition(p_min.x - 2 * maxLen, p_min.y - 2 * maxLen, p_max.z + 2 * maxLen, 0.5 * (p_min.x + p_max.x), 0.5 * (p_min.y + p_max.y), 0.5 * (p_min.z + p_max.z), 1, 1, 0);viewer->updatePointCloud(m_currentCloud, "cloud");ui.qvtkWidget->update();on_action_reset_triggered();}
}//后轴测
void PointCloudVision::on_action_backIso_triggered()
{viewer->setCameraPosition(p_max.x + 2 * maxLen, p_max.y + 2 * maxLen, p_max.z + 2 * maxLen, 0.5 * (p_min.x + p_max.x), 0.5 * (p_min.y + p_max.y), 0.5 * (p_min.z + p_max.z), -1, -1, 0);viewer->updatePointCloud(m_currentCloud, "cloud");ui.qvtkWidget->update();on_action_reset_triggered();
}//设置点云颜色
void PointCloudVision::on_action_setColor_triggered()
{QColor color = QColorDialog::getColor(Qt::white, this, "设置点云颜色", QColorDialog::ShowAlphaChannel);viewer->removeAllPointClouds();pcl::visualization::PointCloudColorHandlerCustom<PointT> singleColor(m_currentCloud, color.red(), color.green(), color.blue());viewer->addPointCloud(m_currentCloud, singleColor, "myCloud", 0);viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_OPACITY, color.alpha() * 1.0 / 255, "myCloud");ui.qvtkWidget->update();}//设置高度渲染
void PointCloudVision::on_action_heightRamp_triggered()
{heightRampDlg.show();
}//进行高度渲染
void PointCloudVision::setHeightRamp(int dir, double height)
{//清空点云viewer->removeAllPointClouds();m_heightCloudList.clear();double min_range = 0;double max_range = 0;std::string field = "x";switch (dir){case 0:min_range = p_min.x;max_range = p_max.x;field = "x";break;case 1:min_range = p_min.y;max_range = p_max.y;field = "y";break;case 2:min_range = p_min.z;max_range = p_max.z;field = "z";break;default:break;}for (double i = min_range - 1; i < max_range + height;){PointCloudT::Ptr cloudTemp(new PointCloudT());pcl::PassThrough<PointT> pass;			//直通滤波器对象pass.setInputCloud(m_currentCloud);		//输入点云pass.setFilterFieldName(field);			//设置过滤字段pass.setFilterLimits(i, i + height);	//设置过滤范围pass.setFilterLimitsNegative(false);	//设置保留字段pass.filter(*cloudTemp);				//执行滤波i += height;m_heightCloudList.append(cloudTemp);}//分段渲染for (int j = 0; j < m_heightCloudList.size(); j++){pcl::visualization::PointCloudColorHandlerGenericField<PointT> fieldColor(m_heightCloudList.at(j), field);std::string index = std::to_string(j);viewer->addPointCloud(m_heightCloudList.at(j), fieldColor, index);}}double getMinValue(PointT p1, PointT p2)
{double min = 0;if (p1.x - p2.x > p1.y - p2.y){min = p1.y - p2.y;}else{min = p1.x - p2.x;}if (min > p1.z - p2.z){min = p1.z - p2.z;}return min;
}double getMaxValue(PointT p1, PointT p2)
{double max = 0;if (p1.x - p2.x > p1.y - p2.y){max = p1.x - p2.x;}else{max = p1.y - p2.y;}if (max < p1.z - p2.z){max = p1.z - p2.z;}return max;
}
运行结果

三、在线协助:

如需安装运行环境或远程调试,见文章底部个人 QQ 名片,由专业技术人员远程协助!

1)远程安装运行环境,代码调试
2)Visual Studio, Qt, C++, Python编程语言入门指导
3)界面美化
4)软件制作
5)云服务器申请
6)网站制作

当前文章连接:https://blog.csdn.net/alicema1111/article/details/132666851
个人博客主页:https://blog.csdn.net/alicema1111?type=blog
博主所有文章点这里:https://blog.csdn.net/alicema1111?type=blog

博主推荐:
Python人脸识别考勤打卡系统:
https://blog.csdn.net/alicema1111/article/details/133434445
Python果树水果识别:https://blog.csdn.net/alicema1111/article/details/130862842
Python+Yolov8+Deepsort入口人流量统计:https://blog.csdn.net/alicema1111/article/details/130454430
Python+Qt人脸识别门禁管理系统:https://blog.csdn.net/alicema1111/article/details/130353433
Python+Qt指纹录入识别考勤系统:https://blog.csdn.net/alicema1111/article/details/129338432
Python Yolov5火焰烟雾识别源码分享:https://blog.csdn.net/alicema1111/article/details/128420453
Python+Yolov8路面桥梁墙体裂缝识别:https://blog.csdn.net/alicema1111/article/details/133434445
Python+Yolov5道路障碍物识别:https://blog.csdn.net/alicema1111/article/details/129589741
Python+Yolov5跌倒检测 摔倒检测 人物目标行为 人体特征识别:https://blog.csdn.net/alicema1111/article/details/129272048

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【wiki知识库】08.添加用户登录功能--后端SpringBoot部分

目录 一、今日目标 二、SpringBoot后端实现 2.1 新增UserLoginParam 2.2 修改UserController 2.3 UserServiceImpl代码 2.4 创建用户上下文工具类 2.5 通过token校验用户&#xff08;重要&#xff09; 2.6 创建WebMvcConfig 2.7 用户权限校验拦截器 一、今日目标 上篇…

【大模型】大模型指令微调的“Prompt”模板

文章目录 一、微调数据集格式二、常用的指令监督微调模板2.1 指令跟随格式&#xff08;Alpaca&#xff09;2.2 多轮对话格式&#xff08;ShareGPT&#xff09;2.3 其他形式2.4 常见模板 参考资料 一、微调数据集格式 在进行大模型微调的过程中&#xff0c;我们会发现“Prompt”…

mysql 日志爆满,删除日志文件,定时清理日志

今天发现网站不能正常访问&#xff0c;于是登陆服务器查找问题。 机智的我随手用命令&#xff1a;df -l 发现 硬盘爆满了&#xff0c;于是就知道问题所在了。 Filesystem 1K-blocks Used Available Use% Mounted on/dev/xvda1 20641404 16963004 16929876 10…

安捷伦N9918A是德keysight N9918B 30khz-26.5g频谱分析仪

Agilent N9918A、Keysight N9918B、 FieldFox 手持式射频和微波组合分析仪&#xff0c;30 kHz - 26.5 GHz 附加功能&#xff1a; 30 kHz 至 26.5 GHz动态范围&#xff1a;100 dBCAT&#xff1a;故障点距离、回波损耗、电缆损耗VNA&#xff1a;S11、S21、S22、S12、幅度和相位…

PMP考试一定要考到3A吗?怎么备考?

PMP&#xff08;Project Management Professional&#xff09;认证是全球公认的项目管理专业人士资格认证&#xff0c;它代表着项目管理领域的高水平标准。 在备考PMP考试时&#xff0c;有些赛宝关心是否需要考到3A&#xff08;即三个领域均为Above Target&#xff0c;超出目标…

GoFly快速开发框架代码市场使用说明

说明 我们框架坚持开源的项目绝不能存在收费项目&#xff0c;所以我们gofly快速开发开源版没有内置代码仓插件&#xff0c;因此需要使用代码市场中的代码包需要再企业版中使用&#xff0c;代码市场插件如下&#xff1a; 图1、社区-代码市场​​​​ 他和企业版管理后台的代码仓…

慢SQL优化的30个思路方案整理

文章目录 &#xff08;1&#xff09;索引优化&#xff08;2&#xff09;查询重构&#xff08;3&#xff09;减少数据扫描量&#xff08;4&#xff09;利用缓存&#xff08;5&#xff09;分区表&#xff08;6&#xff09;优化排序和分组&#xff08;7&#xff09;业务查询条件限…

openfoam模拟时取消报错Floating point exception (core dumped),从而看到具体错误内容

一、理论简介&#xff1a; unset FOAM_SIGFPE 是用于在 OpenFOAM 环境中解除对浮点异常&#xff08;Floating Point Exception, FPE&#xff09;的信号处理。 FOAM_SIGFPE 环境变量的作用 在 OpenFOAM 中&#xff0c;FOAM_SIGFPE 环境变量用于控制程序对浮点异常&#xff08…

【设计模式】设计模式之观察者模式

文章目录 观察者模式什么是观察者模式引入组成UML图代码实现1. 定义观察者接口2. 定义主题接口3. 实现具体观察者4. 实现具体被观察者5.测试 应用场景优点缺点 观察者模式 什么是观察者模式 观察者模式&#xff08;Observer Pattern&#xff09;是一种设计模式 它定义了一种…

BTS4140N:高侧电源开关芯片中文数据手册

芯片概述 &#xff1a; BTS4140N是一款智能高压侧电源开关N沟道垂直功率MOSFET&#xff0c;带电荷泵和电流控制输入、采用智能SIPMOS技术单片集成&#xff0c;提供嵌入式保护和诊断功能。 芯片特征描述 电流控制输入短路保护电流限制欠电压时关断过压保护&#xff08;包括负载突…

【mars3d】GraphicLayer遍历添加数据,正确拿到数据

import * as mars3d from "mars3d"export let map // mars3d.Map三维地图对象 export let graphicLayer // 矢量数据图层 export const mapOptions {scene: {center:{"lat":30.577085,"lng":116.885511,"alt":45203.5,"heading&…

Jenkins参数化构建

目录 一. 准备ansible 二. Gitlab新建子项目 三. Jenkins建立任务&#xff0c;进行初步配置 四. 导入nginx主机的公钥 五. 配置ansible执行脚本 六. 构建测试 一. 准备ansible 在jenkins主机中安装ansible [rootjenkins ~]# yum install -y epel-release [rootjenkins…

【学习笔记】Day 6

一、进度概述 1、《地震勘探原理》第二章 2、“DenseNet” 周报分享 二、详情 1、《地震勘探原理》第二章 注&#xff1a;本来的打算是逐章整理&#xff0c;但是在听老师指导后&#xff0c;明晰了学习目的。故学习方法更改为侧重 “刷” 。不求一遍全弄懂&#xff0c…

AI在商品计划领域的应用

在现代商业环境中&#xff0c;AI驱动的商品计划优化已经成为企业有效管理资源和提高利润的关键因素。 市场预测与库存管理 精准市场预测&#xff1a;以某著名零售品牌为例&#xff0c;该品牌引入了一种基于AI的智能分析工具&#xff0c;帮助实现了精准的市场预测与库存管理。根…

【Linux基础】Linux基本指令(一)

目录 前言一&#xff0c; ls指令二&#xff0c;pwd指令三&#xff0c;cd指令3.1 当前目录与上级目录3.2 绝对路径和相对路径3.3 tree指令 四&#xff0c;创建一个普通文件或目录4.1 touch指令4.2 mkdir指令 五&#xff0c;删除目录或文件5.1 rmdir指令5.2 rm 指令 六&#xff0…

细节持续跟新

1.input的自带光标如何去除 2.阻止事件冒泡 3.获取父亲兄弟的innertext 4.画表格 参考博主链接 前端-HTML表格制作_哔哩哔哩_bilibili 美化

不同环境下RabbitMQ的安装-3 操作RabbitMQ

前面两篇从不同环境下RabbitMQ的安装-1 为什么要使用消息服务 到同环境下RabbitMQ的安装-2 ARM架构、X86架构、Window系统环境下安装RabbitMQ介绍了关于如何在ARM架构、X86架构和Window系统下如何安装&#xff0c;各位小伙伴可以根据自己的实际开发场景参考安装。 到本篇是一些…

【ARM】CMSIS 软件标准接口

目录 CMSIS&#xff1a;Cortex Microcontroller Software Interface Standard1. 概述2. CMSIS-Core2.1 概述2.2 关键组件2.3 示例代码2.4 详细解释 3. CMSIS-DSP3.1 概述3.2 关键组件3.3 示例代码3.4 详细解释 4. CMSIS-RTOS4.1 概述4.2 关键组件4.3 示例代码4.4 详细解释 5. C…

【案例40】Apache中mod_proxy模块的使用

NC中间件 应用场景&#xff1a;配置了apache的情况&#xff0c;包括uap集群&#xff0c;配置https等场景下均适用&#xff1b;如果是单机&#xff08;NC单结点情况不存在问题&#xff0c;则不用配置这项; was环境也不用配置此项。&#xff09; 解决方案&#xff1a;按如下两…

Spring Boot 3.x Rest API最佳实践之API设计

本系列教程将会以企业中API基础功能封装为目标&#xff0c;用最新的Spring Boot 3.x版本来逐步搭建和完善Rest API项目基础架构&#xff0c;并结合实际电商项目中API的实现需求来进行最佳实践。如果觉得对你有帮助&#xff0c;记得点赞收藏&#xff0c;关注小卷&#xff0c;后续…