PCL1.12+VTK9.1+QT6编译部署

2023-10-27

 本文讲解使用的环境是vs2019+pcl1.12.0+vtk9.1+qt6.0,最后再展示一个示例程序

1 编译VTK

    vtk下载地址如下:

https://vtk.org/download/

然后用cmake构建,修改一下几个地方

    然后打开生成的vs项目,生成ALL_BUILD,

    最后再点击INSTALL生成

    最后生成如下库和文件

2 编译PCL

    先下载安装releases版本,把PCL其他的依赖库安装一下,免得自己去编译,下载地址如下

https://github.com/PointCloudLibrary/pcl/releases

    下载后,然后安装,安装完成后就会生成下面的依赖库,然后将里面的vtk全部替换成自己刚才编译的vtk文件

    然后下载PCL源码,地址如下:

https://github.com/PointCloudLibrary/pcl

    下载完后,打开下面这个文件

    打开文件后根据自己的路径修改下面的代码

# Find and set Boost flags

# If we would like to compile against a dynamically linked Boost
if(PCL_BUILD_WITH_BOOST_DYNAMIC_LINKING_WIN32 AND WIN32)
  set(Boost_USE_STATIC_LIBS OFF)
  set(Boost_USE_STATIC OFF)
  set(Boost_USE_MULTITHREAD ON)
  string(APPEND CMAKE_CXX_FLAGS " -DBOOST_ALL_DYN_LINK -DBOOST_ALL_NO_LIB")
else()
  if(NOT PCL_SHARED_LIBS OR WIN32)
    set(Boost_USE_STATIC_LIBS ON)
    set(Boost_USE_STATIC ON)
  endif()
endif()

#增加下面两行代码
set(Boost_LIBRARY_DIR D:/2021_software/PCL/install/PCL1.12.0/3rdParty/Boost/lib)
set(Boost_INCLUDE_DIR D:/2021_software/PCL/install/PCL1.12.0/3rdParty/Boost/include/boost-1_76)

set(Boost_ADDITIONAL_VERSIONS
  "1.79.0" "1.79" "1.78.0" "1.78" "1.77.0" "1.77" "1.76.0" "1.76" "1.75.0" "1.75" 
  "1.74.0" "1.74" "1.73.0" "1.73" "1.72.0" "1.72" "1.71.0" "1.71" "1.70.0" "1.70"
  "1.69.0" "1.69" "1.68.0" "1.68" "1.67.0" "1.67" "1.66.0" "1.66" "1.65.1" "1.65.0" "1.65")

# Optional boost modules
find_package(Boost 1.65.0 QUIET COMPONENTS serialization mpi)
if(Boost_SERIALIZATION_FOUND)
  set(BOOST_SERIALIZATION_FOUND TRUE)
endif()

# Required boost modules65
set(BOOST_REQUIRED_MODULES filesystem date_time iostreams system)
find_package(Boost 1.65.0 REQUIRED COMPONENTS ${BOOST_REQUIRED_MODULES})

if(Boost_FOUND)
  set(BOOST_FOUND TRUE)
endif()

    添加FLANN和OPENNI2目录

    修改vtk目录和qt版本

    这个就可以生成vs项目了,生成项目后编制再安装就可以得到头文件和库文件

3 编译示例

    新建一个QVTKWindow.h文件

#ifndef QVTKWINDOW_H
#define QVTKWINDOW_H

// Point Cloud Library
#include <pcl/point_cloud.h>
#include <pcl/point_types.h>
#include <pcl/visualization/pcl_visualizer.h>

// Visualization Toolkit (VTK)
#include <vtkRenderWindow.h>
#include <QVTKRenderWidget.h>
#include <QVTKOpenGLNativeWidget.h>

typedef pcl::PointXYZRGBA       PointT;
typedef pcl::PointCloud<PointT> PointCloudT;

//点云数据
typedef struct vtkpointcloud{
    float x;
    float y;
    float z;
    unsigned int red;
    unsigned int green;
    unsigned int blue;
}VTK_POINT_CLOUD_S;

class QVTKWindow : public QVTKOpenGLNativeWidget
{
    Q_OBJECT
public:
    explicit QVTKWindow(int win_size,QWidget *parent = nullptr);
    ~QVTKWindow();
private:
    pcl::visualization::PCLVisualizer::Ptr viewer;
    PointCloudT::Ptr                       cloud;
};
#endif // QVTKWINDOW_H

    新建一个QVTKWindow.cpp文件

#include "QVTKWindow.h"
#include <qpainter.h>
#include <qdebug.h>
#include <pcl/common/io.h>
#include <pcl/io/io.h>
#include <pcl/io/pcd_io.h>
#include <pcl/io/obj_io.h>
#include <pcl/PolygonMesh.h>
#include <pcl/point_cloud.h>
#include <pcl/io/vtk_lib_io.h>//loadPolygonFileOBJ所属头文件;
#include <pcl/visualization/pcl_visualizer.h>
#include <pcl/common/common_headers.h>
#include <pcl/features/normal_3d.h>
#include <pcl/io/pcd_io.h>
#include <pcl/visualization/pcl_visualizer.h>
#include <pcl/console/parse.h>
#include <pcl/io/ply_io.h>
#include "vtkGenericOpenGLRenderWindow.h"
QVTKWindow::QVTKWindow(QWidget *parent)
    : QVTKOpenGLNativeWidget(parent)
{
#if VTK_MAJOR_VERSION > 8
  auto renderer2 = vtkSmartPointer<vtkRenderer>::New();
  auto renderWindow2 = vtkSmartPointer<vtkGenericOpenGLRenderWindow>::New();
  renderWindow2->AddRenderer(renderer2);
  viewer.reset(new pcl::visualization::PCLVisualizer(renderer2, renderWindow2, "viewer", false));
  this->setRenderWindow(viewer->getRenderWindow());
  viewer->setupInteractor(this->interactor(), this->renderWindow());
#else
  viewer.reset(new pcl::visualization::PCLVisualizer("viewer", false));
  this->SetRenderWindow(viewer->getRenderWindow());
  viewer->setupInteractor(this->GetInteractor(), this->GetRenderWindow());
#endif
    std::string fileName = "3.ply";
    pcl::PolygonMesh meshData;//读取原始数据
    pcl::io::loadPolygonFile(fileName,meshData);

    pcl::PointCloud<pcl::PointXYZ>::Ptr cloud;
    cloud.reset(new pcl::PointCloud<pcl::PointXYZ>);
    pcl::fromPCLPointCloud2(meshData.cloud, *cloud);//将obj数据转换为点云数据

    // 显示结果图
    viewer->setBackgroundColor (0, 0, 0); //设置背景
    pcl::visualization::PointCloudColorHandlerGenericField<pcl::PointXYZ> fildColor(cloud, "z");
    viewer->addPointCloud<pcl::PointXYZ>(cloud, fildColor, "sample cloud");
    viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, "sample cloud");
    viewer->resetCamera ();
    update ();
}

QVTKWindow::~QVTKWindow()
{
}

   然后将上面的类添加到主界面的布局中

    QVTKWindow *win = new QVTKWindow(100,this);
    ui->verticalLayout->addWidget(win);

   生成结果如下

    测试代码和点云文件,我放到CSDN上面了,有需要的同学可以下载

https://download.csdn.net/download/qq_40732350/85602521

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PCL1.12+VTK9.1+QT6编译部署 的相关文章

随机推荐

  • 为什么ChatGPT这么强?—— 一文读懂ChatGPT原理!

    前言 最近一周多的时间 只要不是生活在火星 喜欢技术的同学一定都被OpenAI的ChatGPT给刷屏了 ChatGPT与以往的公开提供服务的对话机器人相比 性能有了显著的提高 它可以相对可靠地提供一些日常对话 知识获取的功能 也可以它根据人
  • python-数据分析(9-Pandas)

    Pandas 9 Pandas 9 1 介绍与安装 Pandas介绍与安装 为什么会有Pandas Pandas支持大部分Numpy语言风格 尤其是数组函数与广播机制的各种数据处理 但是Numpy更适合处理同质型的数据 而Pandas的设计
  • SSRF web351-360(除357)

    SSRF web351 web360 写在前面 ssrf常见的一些函数 curl init 初始curl会话 curl setopt 会话设置 curl close 会话关闭 file get contents 将整个文件或一个url所指向
  • (JS设计模式)二.部分面试题

    1 打车时 可以打专车或者快车 任何车都有车牌号和名称 不同车价格不同 快车每公里1元 专车每公里2元 行程开始时 显示车辆信息 行程结束时 显示打车金额 假定行程就5公里 题目 画出UML类图 用ES6语法写出该示例 答 UML类图 2
  • Linux命令·touch

    linux的touch命令不常用 一般在使用make的时候可能会用到 用来修改文件时间戳 或者新建一个不存在的文件 1 命令格式 touch 选项 文件 2 命令参数 a 或 time atime或 time access或 time us
  • Office2021版64位+mathtype6.9

    终于安装成功了 如果你也遇到以下问题 试试看我的方法行不行 终于成功了很激动 在这里插入代码片 按照网上的教程 分别在以下两个文件夹 注意不一样的根目录 放了这三个文件 然后 打开office是这样的 接着 按照网上说的 不成功就把这三个文
  • uniApp 开发支付宝小程序引入订阅消息组件

    1 manifest json 配置 2 page json 配置 3 页面引入组件
  • EXTJS--分页PagingToolbar插件的重新刷新、重新加载方法

    var pagebar new Ext PagingToolbar store store pageSize Ext page pageSize displayInfo true displayMsg 共有 2 条记录 当前显示 0 1 条
  • 详解区块链分层构架

    区块链 是一个结合了数学 密码学 计算机学等大量学科和技术而形成的去中心化网络系统 如何实现这些技术的融合 则来自于区块链在构建时所形成的六大主要的分层结构 他们分别是网络层 数据层 共识层 激励层 合约层 以及应用层 此外 还有支持数据流
  • 快速入门 YOLOv5(ultralytics)

    YOLOv5 是一系列在 COCO 数据集上预训练的对象检测架构和模型 代表Ultralytics 对未来视觉 AI 方法的开源研究 结合了在数千小时的研究和开发中获得的经验教训和最佳实践 文档 有关训练 测试和部署的完整文档 请参阅YOL
  • windows应急响应工具

    Webshell查杀 d盾 http www d99net net WEBDIR WebShell 扫描服务 OpenRASP 团队 https scanner baidu com pages intro 河马 https www shel
  • Telegram 查看下载保存的文件

    文章目录 Android 缓存文件 本地文件 Windows 缓存文件 本地文件 清理缓存 Android Windows Android 缓存文件 单纯的点下载或者图片 GIF 等的预览只会缓存到 Internal Storage sdc
  • [问题已处理]-mac安装cobra失败

    导语 今天在mac环境中没法成功安装cobra 记录一下避免以后踩坑 执行go get报错 更换安装方式 安装cobra cli go get u github com spf13 cobra latest go install githu
  • 最全最实用的 安装ESXi6及Linux虚拟机的创建教程

    ESXi的作为虚拟化环境的虚拟机管理程序层 负责将服务器虚拟成资源池 提供接口供管理组件调用 将下面的ISO刻录成光盘或可启动 盘 安装在服务器裸机上 安装过程 开机做好阵列 选择从安装介质启动 按F11继续 输入密码 rootroot 密
  • [QT编程系列-8]:C++图形用户界面编程,QT框架快速入门培训 - 3- QT窗体设计 - 自定义对话框

    目录 3 QT窗体设计 3 6 自定义对话框 3 6 1 种类 3 6 2 输入对话框 编辑 3 6 3 字体对话框 3 6 4 文件对话框 编辑 3 6 5 颜色对话框 3 6 6 输出对话框 编辑 3 6 7 进度条对话框 编辑 3 6
  • linux下编译内核时出现 scripts/basic/fixdep.c:206 等错误解决办法

    现象如下 下面是网上抄的 我本人是英文的 不方便看 就当下面是翻译的吧 大致信息如下 scripts basic fixdep c 300 警告 未使用的变量 s scripts basic fixdep c 在函数 print deps
  • AlarmManager实现定时功能

    实现定时间隔功能 1 发送 AlarmManager alarmService AlarmManager context getSystemService ALARM SERVICE Intent alarmIntent new Inten
  • js中[]、{}、()区别

    一 大括号 表示定义一个对象 大部分情况下要有成对的属性和值 或是函数体 表示对象 表示对象的属性 方法 如果用在方法名后面 代表调用 如 var LangShen Name Langshen AGE 28 上面声明了一个名为 LangSh
  • 状态机总结(简洁)

    一 概念 状态机简写为 FSM Finite State Machine 也称为同步有限状态机 我们一般简称为状态机 之所以说 同步 是因为状态机中所有的状态跳转都是在时钟的作用下进行的 而 有限 则是说状态的个数是有限的 状态机的每一个状
  • PCL1.12+VTK9.1+QT6编译部署

    本文讲解使用的环境是vs2019 pcl1 12 0 vtk9 1 qt6 0 最后再展示一个示例程序 1 编译VTK vtk下载地址如下 https vtk org download 然后用cmake构建 修改一下几个地方 然后打开生成的