QT框架下进行pcl点选功能

Qt PCL学习(一):环境搭建 阅读详情

首先感谢学长的帮助,关于pcl点选网上有源码,但是如何移植到qt里面呢,通过将回调函数设定为静态函数便可以实现这一功能,然后需要注意的是在初始化函数中,需要对点选功能进行操作

viewer->registerPointPickingCallback(point_callback, this);

这里面利用this指针将类成员传给函数,这样就可以使用类里面的成员了。

需要注意的是,初始化函数这么写,

void pcl_test::initialvtk()
{
	pointptr.reset(new pcl::PointCloud<pcl::PointXYZ>);
	viewer.reset(new pcl::visualization::PCLVisualizer("viewer", false));
	viewer->addPointCloud(pointptr, "cloud");
	viewer->registerPointPickingCallback(point_callback, this);
	pcl::PointCloud<pcl::PointXYZRGB>::Ptr clicked_points_3d_(new pcl::PointCloud<pcl::PointXYZRGB>);
	this->clicked_points_3d = clicked_points_3d_;
	ui.qvtkWidget->SetRenderWindow(viewer->getRenderWindow());
	viewer->setupInteractor(ui.qvtkWidget->GetInteractor(), ui.qvtkWidget->GetRenderWindow());
	ui.qvtkWidget->update();
}

这里面将类成员函数clicked_points_3d进行初始化,为了调用回调函数时,避免内存泄露。但是直接初始化会崩溃,需要引入另外的参数来进行初始化,至于为什么还不知道。

然后回调函数是这样的

void pcl_test::point_callback(const pcl::visualization::PointPickingEvent& event, void* args)
{
	//struct callback_args* data = (struct callback_args *)args;
	pcl_test *p = (pcl_test *)args;


	pcl::PointXYZRGB current_point;
	event.getPoint(current_point.x, current_point.y, current_point.z);
	p->clicked_points_3d->points.push_back(current_point);

	pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZRGB> red(p->clicked_points_3d, 255, 0, 0);
	
	p->viewer->removePointCloud("clicked_points");
	p->viewer->addPointCloud(p->clicked_points_3d, red, "clicked_points");
	p->viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 10, "clicked_points");
}

这个就是和pcl给的源码差不多了,这里主要是将传入的参数args用当前类实例化然后传递。以上是实现这个功能的.cpp

下面给出.h文件

#pragma once


#include <QtWidgets/QMainWindow>
#include "ui_pcl_test.h"

//vtk控件
#include <vtkRenderWindow.h>
#include <vtkAutoInit.h> 
VTK_MODULE_INIT(vtkRenderingOpenGL);
VTK_MODULE_INIT(vtkInteractionStyle);

//pcl依赖项
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/visualization/pcl_visualizer.h>
//体素滤波
#include <pcl/filters/voxel_grid.h>
#include <pcl/visualization/cloud_viewer.h>
//高斯滤波
#include <pcl/filters/statistical_outlier_removal.h>
//半径滤波
#include<pcl/filters/radius_outlier_removal.h>
//直通滤波
#include <pcl/filters/passthrough.h>





//typedef pcl::PointCloud<pcl::PointXYZ> pointcloud;
//typedef pcl::PointCloud<pcl::PointXYZ> pointcloudrgb;
class pcl_test : public QMainWindow
{
	Q_OBJECT

public:
	pcl_test(QWidget *parent = Q_NULLPTR);
	~pcl_test();

private:

	Ui::pcl_testClass ui;
	//定义点云指针

	pcl::PointCloud<pcl::PointXYZ>::Ptr pointptr;
	//定义显示器
	boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer;
	
	//初始化vtk
	void initialvtk();
	//撤销
	void initialize();
	//创建打开槽
//private slots:
	//打开文件
	void openfile();
	//体素滤波
	void voxelgridfilter();
	//初始化全局点云
	//新建一个全局点云以及当前输入点云的储存结果用来存放每次动作后的结果,以便于撤销
	void globalpoint();
	pcl::PointCloud<pcl::PointXYZ>::Ptr globalptr;
	pcl::PointCloud<pcl::PointXYZ>::Ptr local_1ptr;
	pcl::PointCloud<pcl::PointXYZ>::Ptr local_2ptr;
	//局部撤销
	void localinitialize();
	//高斯滤波
	void gaussfilter();
	//半径滤波
	void radiusfilter();
	//直通滤波
	void passthfilter();
	//创建回调函数,用来相应点的读取
	static void point_callback(const pcl::visualization::PointPickingEvent& event,void* args);
	pcl::PointCloud<pcl::PointXYZRGB>::Ptr clicked_points_3d;
	//void point_read();
};

 

VS2017+PCL+QT+VTK开发环境搭建 一,VS2017+PCL1.8.1安装及环境配置 按照我之前的这个配置即可:https://blog.youkuaiyun.com/yzk1062913581/article/details/101637606 二,QT+VS环境配置 安装QT,自己去官网下载即可; http://download.qt.io/ 在安装组件... 阅读详情

相关推荐

PCL:交互点选点云

本文介绍了PCL实现点云交互点选的方法,

孙悟空 2730

【自用】点云学习记录——PCL屏幕选点

PCL中通过注册registerPointPickingCallback来实现点云的三维坐标选取。

RR0665的博客 1244

PCL 屏幕上选点并显示三维坐标【2025最新版】

屏幕上选点并显示坐标,博客长期更新,本文最近一次更新时间为:2025年5月24日。

点云侠的博客 36万+

PCL学习系列(一)----PCL屏幕选点

此系列旨在记录学习过程,及代码案例。 此文操作平台:win7+pcl1.8.0+vs2015 PCL中通过注册回调函数registerPointPickingCallback来实现点云的三维坐标选取。 以下为代码main.cpp: #include &lt;iostream&gt; #include &lt;pcl/io/pcd_io.h&gt; #include &lt;pcl/poi...

weixin_40863346的博客 4955

《QT+PCL 第一章》点云文件保存

点云文件保存一、 核心代码二、QT设置三、结果展示 一、 核心代码 二、QT设置 三、结果展示

阁楼 2641

《QT+PCL》点云的点选与框选

【代码】《QT+PCL》点云的点选与框选。

阁楼 3602

3D点云标注

3D点云标注

weixin_44606139的博客 4002

QT配置PCL过程记录(一)

因为自己最近要用到Qt和PCL,所以就在网上搜集了一下资料,经过一天的折腾,总算是将PCL装上并且在Qt上配置成功。过程总的来说还是有些艰难的,毕竟穷之前没用过Qt,不了解Qt的机制,只能靠自己看一些书和网上的教程才得以没走太多的弯路。不过这中间也是碰到了一些问题,正好在这记录一下。 一、准备工作:软件的下载 我们所需要的软件主要有一下几个: VS2015:这就不用怎么介绍了,使用很广泛的一个软......

dayuhaitang1的博客 1万+

【PCL】基于C++与QT的PCL环境配置(保姆级教程)

基于C++与QT的PCL环境配置(保姆级教程)

qq_49149369的博客 1万+

基于PCL、Open3d、Easy3d 、VTK等常见开源库的QT开发

PCL+QT开发

阁楼 2万+

《PCL+QT》各版本环境配置问题总结

pcl qt各个版本配置

阁楼 6934

Windows系统中基于PCL的Qt开发环境详细配置教程

Windows系统中基于PCL的Qt开发环境详细配置教程

Vijay's Blog 4175

《QT+PCL 第一章》:点云读取显示

点云读取显示一、核心代码二、QT设置三、效果展示 一、核心代码 二、QT设置 三、效果展示

阁楼 1万+

Ubuntu下Qt使用PCL可视化点云

简介 最近做了一些激光雷达的数据采集和显示,中间用到了一些技术想在这里分享一下。

billy的博客 4873

Qt+pcl+vtk 屏幕选点

本程序设计了Qt界面,实现了点云显示、屏幕选点、调节颜色等功能。屏幕选点功能中,按住shift并选择相应的点,即可选中该点,目前功能并不完善,需要滑动滑块才能更新显示坐标。开发环境为vs2015+pcl1.8.1+Qt5.11.2+vtk

PCL+Qt点云可视化+鼠标点拾取

实现如下功能: 1. PCL+QT可视化点云; 2. 支持鼠标坐标拾取,并且把鼠标拾取点显示在控件上,而不是控制台上,这个功能是网上很多代码都是没有的; 3. 包含我自己编译的PCL动态库以及对应的VTK库,不需要额外编译了; 4. 工程项目不需要额外配置,打开解决方案就能用,如果报错,可能需要修改一下windows SDK版本,选择你自己的Windows SDK版本即可;

Qt Creator中使用PCL库

我之前写过一篇博客Qt 5.9使用VTK显示点云,可惜其中很多部分都是失败的,而且排版糟糕,不过其中PCL的安装以及在VS中使用PCL的方法是值得参考的,起码我通过这种方式安装的PCL在VS上一直用得OK。但是用了一段时间还是有一些小问题,不致命但是极其恶心,比如 在VS中使用PCL我怀疑加入的附加依赖项过多,经常导致IntelliSense卡半天,自动补全功能近乎废了,对于我这种“面向自动补全...

liyunxin_c_language的博客 5391

数据标注工具:AiLabel.js实现标注 超详细教程 案例分享

背景:在前端开发过程中难免遇到针对图片的缩放平移;以及在图片上进行矢量数据、文本、标注的展示;如果你有上面的任何需求,恭喜你,找到组织了.... 在此背景下,AILabel.js出生了。 前面文章我们已经介绍过AiLabel.js了; https://blog.youkuaiyun.com/u012967771/article/details/113148527 npm下载地址:https://www.npmjs.com/package/ailabel github地址:https://github.com/d.

前端互助会 9365

Qt+PCL手把手教材(第2讲)——PCL库 介绍及版本选择(1.12、1.13)以及Qt + PCL 结合的基本架构

(Point Cloud Library)是一个开源的、功能强大的 C++ 库,专门用于点云数据的处理、分析和可视化。点云数据通常是由三维扫描仪或立体视觉系统生成的,代表了物体表面的形状。PCL 提供了大量的工具和算法,用于点云的处理、特征提取、配准、滤波、分割、重建和可视化。

qq_36812406的博客 3126

NLP-Beginner 任务一:基于机器学习的文本分类(超详细!!)

NLP-Beginner 任务一:基于机器学习的文本分类传送门一. 介绍1.1 任务简介1.2 数据集1.3 流程介绍二. 特征提取2.1 词袋特征(Bag-of-word)2.2 N元特征 (N-gram)三. 最优化求解3.1 Softmax回归介绍3.2 损失函数3.3 梯度下降3.4 学习率四. 代码及实现4.1 实验设置4.2 结果展示4.3 代码新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、

0oTedo0 9935

【通信协议】I2C总线(一主多从)

I2C总线(一主多从)之软件模拟代码详解

m0_75090944的博客 9842
上一篇: QT进行pcl可视化显示
下一篇: windows下qt输出中文
SLAM_masterFei
博客等级 码龄9年 283粉丝 53原创
评论 49
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值