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

PCL点云开发-解决在Qt中嵌入点云窗口出现的一闪而过的黑窗口

PCL点云开发-解决在Qt中嵌入点云窗口出现的一闪而过的黑窗口

众所周知,在windows下开发PCL点云最快的方式就是到官网下载其预编译好的库,比如:
PCL-1.14.0-AllInOne-msvc2022-win64.exe

这时候你到网络上搜索,大概率会有两种方案:
1、等PCL创建好窗口后,拿到该窗口的句柄,使用Qt的API将其嵌入到QWidget中,这就是为什么会出现一闪而过的黑窗口的原因
2、重新编译VTK以及PCL库,打开Qt支持模块,在Qt中将QOpenGLWidget提升为PCLQVTKWidget

喜欢偷懒的程序员怎么可能会去编译源码呢,绝不可能😂,那就研究下第一种方案如何解决一闪而过的黑窗口。
按照这种思路思考,第一种方案是不是在其创建RenderWindow的时候不显示窗口,等其嵌入Qt控件的时候显示就可以了。是的就是这么简单,怎么做呢?打开格局就可以了,格局如下:

#include <pcl/visualization/pcl_visualizer.h>
#include <vtkRenderer.h>#include <QApplication>
#include <QMainWindow>
#include <QWindow>int main(int argc, char *argv[])
{QApplication a(argc, argv);pcl::visualization::PCLVisualizer::Ptr viewer;// 创建渲染器vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();// 创建渲染窗口vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New();// 设置渲染窗口不显示renderWindow->SetShowWindow(false);// 构造PCLVisualizerviewer.reset(new pcl::visualization::PCLVisualizer(renderer, renderWindow, "viewer", true));// 将renderWindow的嵌入到QWidget中auto viewerWinId = QWindow::fromWinId((WId)renderWindow->GetGenericWindowId());auto widget = QWidget::createWindowContainer(viewerWinId, nullptr);widget->show();// 添加点云pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZRGB>);cloud->resize(500);for (auto &point : *cloud) {point.x = 1024 * rand() / (RAND_MAX + 1.0f);point.y = 1024 * rand() / (RAND_MAX + 1.0f);point.z = 1024 * rand() / (RAND_MAX + 1.0f);point.r = 255 * (1024 * rand() / (RAND_MAX + 1.0f));point.g = 255 * (1024 * rand() / (RAND_MAX + 1.0f));point.b = 255 * (1024 * rand() / (RAND_MAX + 1.0f));}viewer->addPointCloud(cloud, "cloud");return a.exec();
}

效果如下:
在这里插入图片描述

http://www.lryc.cn/news/487063.html

相关文章:

  • 本地音乐服务器(二)
  • 第三十六篇——伯努利试验:到底如何理解随机性?
  • 【Android、IOS、Flutter、鸿蒙、ReactNative 】屏幕适配
  • candence : 如何利用EXCEL 绘制复杂、多管脚元件
  • 项目配置文件选择(Json,xml,Yaml, INI)
  • Android 使用Retrofit 以纯二进制文件流上传文件
  • Vue3踩坑记录
  • 大数据-227 离线数仓 - Flume 自定义拦截器(续接上节) 采集启动日志和事件日志
  • 【热门主题】000054 ECMAScript:现代 Web 开发的核心语言
  • 【Pytorch】torch.nn.functional模块中的非线性激活函数
  • reactflow 中 useNodesState 模块作用
  • Go语言内存分配源码分析学习笔记
  • 【jvm】方法区常用参数有哪些
  • JAVA环境的配置
  • LLM文档对话 —— pdf解析关键问题
  • MySQL单表查询时索引使用情况
  • Qt邮箱程序改良版(信号和槽)
  • 入门到精通mysql数据(四)
  • Java 设计模式 详解
  • 卡尔曼滤波学习资料汇总
  • linux003.在ubuntu中安装cmake的方法
  • EtherNet/IP转Profinet网关连接发那科机器人配置实例解析
  • 自动化运维-检测Linux服务器CPU、内存、负载、IO读写、机房带宽和服务器类型等信息脚本
  • ubuntu24.04设置开机自启动Eureka
  • 从视频帧生成点云数据、使用PointNet++模型提取特征,并将特征保存下来的完整实现。
  • 工化企业内部能源能耗过大 落实能源管理
  • LSTM 和 LSTMCell
  • python成长技能之正则表达式
  • 解决docker报Error response from daemon Get httpsregistry-1.docker.iov2错误
  • 【论文分享】利用多源大数据衡量街道步行环境的老年友好性:以中国上海为例