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

Qt 如何使用VTK显示点云

开发环境

        ubuntu 20.04

        VTK 8.2

编译VTK

下载源码

        git clone --recursive https://gitlab.kitware.com/vtk/vtk.git

        使用版本管理工具,切换版本到8.2

更改编译选项,这里使用cmake-gui进行配置

1、编译类型修改为Release

2、安装路径可以设置,也可以不设置,不设置默认安装到/usr/local目录下

3、勾选VTK_Group_Qt

4、勾选Module_vtkGUISupportQtOpenGL

生成成功后,执行编译

cmake ..

make -j4

make install

 开发

CMakeLists 

find_package(VTK 8.2 COMPONENTS  vtkGUISupportQt
vtkGUISupportQtOpenGL
vtkRenderingGL2PSOpenGL2
vtkRenderingVolumeOpenGL2 REQUIRED)complice_module(${PROJECT_NAME})target_link_libraries( ${PROJECT_NAME} PRIVATE  ${VTK_LIBRARIES}  

.h

#include <QVTKOpenGLNativeWidget.h>
#include <pcl/visualization/pcl_visualizer.h>
#include <vtkGenericOpenGLRenderWindow.h>
#include <vtkOrientationMarkerWidget.h>class  CloudView : public QVTKOpenGLNativeWidget
{Q_OBJECT
public:explicit CloudView(QWidget* parent = nullptr);
private:pcl::visualization::PCLVisualizer::Ptr m_viewer;vtkSmartPointer<vtkRenderer> m_render;vtkSmartPointer<vtkGenericOpenGLRenderWindow> m_renderwindow;vtkSmartPointer<vtkOrientationMarkerWidget> m_axes;
};

.cpp


#include "cloudview.h"
#include <vtkAutoInit.h>
VTK_MODULE_INIT(vtkRenderingOpenGL2)
VTK_MODULE_INIT(vtkInteractionStyle)
VTK_MODULE_INIT(vtkRenderingVolumeOpenGL2)
VTK_MODULE_INIT(vtkRenderingFreeType)#include <vtkAxesActor.h>CloudView::CloudView(QWidget* parent): QVTKOpenGLNativeWidget(parent),m_render(vtkSmartPointer<vtkRenderer>::New()),m_renderwindow(vtkSmartPointer<vtkGenericOpenGLRenderWindow>::New()),m_axes(vtkSmartPointer<vtkOrientationMarkerWidget>::New())
{m_renderwindow->AddRenderer(m_render);m_viewer.reset(new pcl::visualization::PCLVisualizer(m_render, m_renderwindow, "viewer", false));m_viewer->setupInteractor(this->GetInteractor(), this->GetRenderWindow());this->SetRenderWindow(m_viewer->getRenderWindow());m_viewer->setBackgroundColor((double)150.0 / 255.0, (double)150.0 / 255.0, (double)150.0 / 255.0);vtkSmartPointer<vtkAxesActor> actor = vtkSmartPointer<vtkAxesActor>::New();m_axes->SetOutlineColor(0.9300, 0.5700, 0.1300);m_axes->SetOrientationMarker(actor);m_axes->SetInteractor(m_viewer->getRenderWindow()->GetInteractor());m_axes->SetViewport(0.9, 0, 1, 0.15);m_axes->SetEnabled(true);m_axes->InteractiveOn();m_axes->InteractiveOff();m_viewer->getRenderWindow()->Render();
}void CloudView::addPointCloud(const Cloud::Ptr& cloud)
{if (!m_viewer->contains(cloud->id().toStdString()))m_viewer->addPointCloud<PointXYZRGBN>(cloud, cloud->id().toStdString());else{pcl::visualization::PointCloudColorHandlerRGBField<PointXYZRGBN> rgb(cloud);m_viewer->updatePointCloud<PointXYZRGBN>(cloud, rgb, cloud->id().toStdString());}if (cloud->pointSize() != 1)m_viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE,cloud->pointSize(), cloud->id().toStdString());if (cloud->opacity() != 1)m_viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_OPACITY,cloud->opacity(), cloud->id().toStdString());m_viewer->getRenderWindow()->Render();
}

ui上拖拽一个openGl控件, 然后提升为CloudView,然后就可以显示点云数据了

PointCloud::Ptr pointPtr;ui->cloudview->addPointCloud( cloud);
ui->cloudview->resetCamera();

显示效果

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

相关文章:

  • Ganache结合内网穿透实现远程或不同局域网进行连接访问
  • Qt槽函数不响应不执行的一种原因:ui提升导致重名
  • vuepress路径问题,导致图片不显示
  • QT 重定向qdebug输出到自绘界面
  • 前端(一):HTML+CSS
  • 如何使用Matlab完成窗口与子窗口
  • Threejs之相机基础
  • 2024SIA上海国际轴承工业展览会 ▎参行业盛会 展轴研风采
  • SQLMap介绍
  • 平头哥玄铁系列 RISC-V 芯片及开发板
  • Android 删除浏览器导航页面修改默认主页
  • 【Stm32-F407】Keil uVision5 下新建工程
  • linux中文件服务器NFS和FTP服务
  • 茶室茶楼计时计费软件,软件中的商品管理计时操作教程
  • 从入门到精通:掌握Spring IOC/DI配置管理第三方bean的技巧
  • Flink的容错机制
  • GO设计模式——11、装饰器模式(结构型)
  • 全志V3s之U-Boot
  • 【华为OD】依据用户输入的单词前缀,从已输入的英文语句中联想出用户想输入的单词,按字典序输出联想到的单词序列
  • CentOS 7.9安装宝塔面板,安装gitlab服务器
  • AutoGen多代理对话项目示例和工作流程分析
  • 多维时序 | MATLAB实现RIME-CNN-LSTM-Multihead-Attention多头注意力机制多变量时间序列预测
  • 使用高防IP防护有哪些优势
  • android-xml语法
  • 【银行测试】第三方支付平台业务流,功能/性能/安全测试方法...
  • 全志V3s之显示当前文件路径
  • 小程序跳转tabbar,tabbar页面不刷新
  • 在SpringData JPA 中实现对持久层的操作
  • C++ SEH结构化异常捕获处理(双平台支持 Linux、Windows)。
  • jvm-sandbox-repeater 精简版部署之standalone模式