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


     本文讲解使用的环境是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

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

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

    1. # Find and set Boost flags
    2. # If we would like to compile against a dynamically linked Boost
    3. if(PCL_BUILD_WITH_BOOST_DYNAMIC_LINKING_WIN32 AND WIN32)
    4. set(Boost_USE_STATIC_LIBS OFF)
    5. set(Boost_USE_STATIC OFF)
    6. set(Boost_USE_MULTITHREAD ON)
    7. string(APPEND CMAKE_CXX_FLAGS " -DBOOST_ALL_DYN_LINK -DBOOST_ALL_NO_LIB")
    8. else()
    9. if(NOT PCL_SHARED_LIBS OR WIN32)
    10. set(Boost_USE_STATIC_LIBS ON)
    11. set(Boost_USE_STATIC ON)
    12. endif()
    13. endif()
    14. #增加下面两行代码
    15. set(Boost_LIBRARY_DIR D:/2021_software/PCL/install/PCL1.12.0/3rdParty/Boost/lib)
    16. set(Boost_INCLUDE_DIR D:/2021_software/PCL/install/PCL1.12.0/3rdParty/Boost/include/boost-1_76)
    17. set(Boost_ADDITIONAL_VERSIONS
    18. "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"
    19. "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"
    20. "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")
    21. # Optional boost modules
    22. find_package(Boost 1.65.0 QUIET COMPONENTS serialization mpi)
    23. if(Boost_SERIALIZATION_FOUND)
    24. set(BOOST_SERIALIZATION_FOUND TRUE)
    25. endif()
    26. # Required boost modules65
    27. set(BOOST_REQUIRED_MODULES filesystem date_time iostreams system)
    28. find_package(Boost 1.65.0 REQUIRED COMPONENTS ${BOOST_REQUIRED_MODULES})
    29. if(Boost_FOUND)
    30. set(BOOST_FOUND TRUE)
    31. endif()

        添加FLANN和OPENNI2目录

        修改vtk目录和qt版本

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

    3 编译示例

        新建一个QVTKWindow.h文件

    1. #ifndef QVTKWINDOW_H
    2. #define QVTKWINDOW_H
    3. // Point Cloud Library
    4. #include <pcl/point_cloud.h>
    5. #include <pcl/point_types.h>
    6. #include <pcl/visualization/pcl_visualizer.h>
    7. // Visualization Toolkit (VTK)
    8. #include <vtkRenderWindow.h>
    9. #include <QVTKRenderWidget.h>
    10. #include <QVTKOpenGLNativeWidget.h>
    11. typedef pcl::PointXYZRGBA PointT;
    12. typedef pcl::PointCloud<PointT> PointCloudT;
    13. //点云数据
    14. typedef struct vtkpointcloud{
    15. float x;
    16. float y;
    17. float z;
    18. unsigned int red;
    19. unsigned int green;
    20. unsigned int blue;
    21. }VTK_POINT_CLOUD_S;
    22. class QVTKWindow : public QVTKOpenGLNativeWidget
    23. {
    24. Q_OBJECT
    25. public:
    26. explicit QVTKWindow(int win_size,QWidget *parent = nullptr);
    27.     ~QVTKWindow();
    28. private:
    29. pcl::visualization::PCLVisualizer::Ptr viewer;
    30.     PointCloudT::Ptr                       cloud;
    31. };
    32. #endif // QVTKWINDOW_H

        新建一个QVTKWindow.cpp文件

    1. #include "QVTKWindow.h"
    2. #include <qpainter.h>
    3. #include <qdebug.h>
    4. #include <pcl/common/io.h>
    5. #include <pcl/io/io.h>
    6. #include <pcl/io/pcd_io.h>
    7. #include <pcl/io/obj_io.h>
    8. #include <pcl/PolygonMesh.h>
    9. #include <pcl/point_cloud.h>
    10. #include <pcl/io/vtk_lib_io.h>//loadPolygonFileOBJ所属头文件;
    11. #include <pcl/visualization/pcl_visualizer.h>
    12. #include <pcl/common/common_headers.h>
    13. #include <pcl/features/normal_3d.h>
    14. #include <pcl/io/pcd_io.h>
    15. #include <pcl/visualization/pcl_visualizer.h>
    16. #include <pcl/console/parse.h>
    17. #include <pcl/io/ply_io.h>
    18. #include "vtkGenericOpenGLRenderWindow.h"
    19. QVTKWindow::QVTKWindow(QWidget *parent)
    20. : QVTKOpenGLNativeWidget(parent)
    21. {
    22. #if VTK_MAJOR_VERSION > 8
    23. auto renderer2 = vtkSmartPointer<vtkRenderer>::New();
    24.   auto renderWindow2 = vtkSmartPointer<vtkGenericOpenGLRenderWindow>::New();
    25.   renderWindow2->AddRenderer(renderer2);
    26.   viewer.reset(new pcl::visualization::PCLVisualizer(renderer2, renderWindow2, "viewer"false));
    27.   this->setRenderWindow(viewer->getRenderWindow());
    28.   viewer->setupInteractor(this->interactor(), this->renderWindow());
    29. #else
    30. viewer.reset(new pcl::visualization::PCLVisualizer("viewer", false));
    31. this->SetRenderWindow(viewer->getRenderWindow());
    32. viewer->setupInteractor(this->GetInteractor(), this->GetRenderWindow());
    33. #endif
    34. std::string fileName = "3.ply";
    35. pcl::PolygonMesh meshData;//读取原始数据
    36. pcl::io::loadPolygonFile(fileName,meshData);
    37. pcl::PointCloud<pcl::PointXYZ>::Ptr cloud;
    38. cloud.reset(new pcl::PointCloud<pcl::PointXYZ>);
    39. pcl::fromPCLPointCloud2(meshData.cloud, *cloud);//将obj数据转换为点云数据
    40. // 显示结果图
    41.     viewer->setBackgroundColor (000); //设置背景
    42. pcl::visualization::PointCloudColorHandlerGenericField<pcl::PointXYZ> fildColor(cloud, "z");
    43. viewer->addPointCloud<pcl::PointXYZ>(cloud, fildColor, "sample cloud");
    44. viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, "sample cloud");
    45. viewer->resetCamera ();
    46. update ();
    47. }
    48. QVTKWindow::~QVTKWindow()
    49. {
    50. }

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

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

       生成结果如下

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

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

  • 相关阅读:
    conductor cluster server decision处理冲突解决方法
    NewStarCTF 2023 公开赛道 WEEK2|Crypto
    Linux拷贝查找和压缩文件
    【SAP消息号C6013】
    Vue3理解(9)
    NR PDSCH(三) TB size determination
    做好性能测试计划的4个步骤!全都是精华!【建议收藏】
    英码科技“深元智能应用”入选中国电信原子能力业务,携手共同打造AI智能视频分析应用“超能力”!
    每一天的努力,都会让远方变得更近——中国人民大学与加拿大女王大学金融硕士
    斯坦福大学为机器人操作模仿学习设计了示教新范式
  • 原文地址:https://blog.csdn.net/qq_40732350/article/details/125394920