• PCL学习笔记三


    PCL的结构和内容

    其基于以下第三方库:Boost 、Eigen 、FLANN 、VTK 、CUDA 、OpenNI 、QHull , 实现点云相关的获取、滤波、分割、配准、检索、特征提取、识别、追踪、曲面重建、可视化等。

    所有模块和. 算法都是通过Boost 共享指针来传送数据。

    数据输入输出(I/O) 保存读取pcd

    从PCD文件写入和读取点云数据 - Being_young - 博客园 (cnblogs.com)

     建立工程文件ch2,然后新建write_pcd.cpp  CMakeLists.txt两个文件

      write_pcd.cpp :

    1. #include <iostream> //标准C++库中的输入输出的头文件
    2. #include <pcl/io/pcd_io.h> //PCD读写类相关的头文件
    3. #include <pcl/point_types.h> //PCL中支持的点类型的头文件
    4. int
    5. main (int argc, char** argv)
    6. {
    7. //实例化的模板类PointCloud 每一个点的类型都设置为pcl::PointXYZ
    8. /*************************************************
    9. 点PointXYZ类型对应的数据结构
    10. Structure PointXYZ{
    11. float x;
    12. float y;
    13. float z;
    14. };
    15. **************************************************/
    16. pcl::PointCloud<pcl::PointXYZ> cloud;
    17. // 创建点云 并设置适当的参数(width height is_dense)
    18. cloud.width = 5;
    19. cloud.height = 1;
    20. cloud.is_dense = false; //不是稠密型的
    21. cloud.points.resize (cloud.width * cloud.height); //点云总数大小
    22. //用随机数的值填充PointCloud点云对象
    23. for (size_t i = 0; i < cloud.points.size (); ++i)
    24. {
    25. cloud.points[i].x = 1024 * rand () / (RAND_MAX + 1.0f);
    26. cloud.points[i].y = 1024 * rand () / (RAND_MAX + 1.0f);
    27. cloud.points[i].z = 1024 * rand () / (RAND_MAX + 1.0f);
    28. }
    29. //把PointCloud对象数据存储在 test_pcd.pcd文件中
    30. pcl::io::savePCDFileASCII ("test_pcd.pcd", cloud);
    31. //打印输出存储的点云数据
    32. std::cerr << "Saved " << cloud.points.size () << " data points to test_pcd.pcd." << std::endl;
    33. for (size_t i = 0; i < cloud.points.size (); ++i)
    34. std::cerr << " " << cloud.points[i].x << " " << cloud.points[i].y << " " << cloud.points[i].z << std::endl;
    35. return (0);
    36. }

    CMakeLists.txt:(第一次接触CMake所以注释的比较多,废话比较多,所以有助于理解)

    1. cmake_minimum_required ( VERSION 2.6 FATAL_ERROR) #对于cmake版本的最低版本的要求
    2. project(ch2) #建立的工程名,例如源代码目录路径的变量名为CH_DIR
    3. #工程存储目录变量名为CH_BINARY_DIR
    4. #要求工程依赖的PCL最低版本为1.3,并且版本至少包含common和IO两个模块 这里的REQUIRED意味着如果对应的库找不到 则CMake配置的过程将完全失败,
    5. #因为PCL是模块化的,也可以如下操作:
    6. # 一个组件 find_package(PCL 1.6 REQUIRED COMPONENTS io)
    7. # 多个组件 find_package(PCL 1.6 REQUIRED COMPONENTS commom io)
    8. # 所有组件 find_package(PCL 1.6 REQUIRED )
    9. find_package(PCL 1.3 REQUIRED)
    10. #下面的语句是利用CMake的宏完成对PCL的头文件路径和链接路径变量的配置和添加,如果缺少下面几行,生成文件的过程中就会提示
    11. #找不到相关的头文件,在配置CMake时,当找到了安装的PCL,下面相关的包含的头文件,链接库,路径变量就会自动设置
    12. # PCL_FOUND:如果找到了就会被设置为1 ,否则就不设置
    13. # PCL_INCLUDE_DIRS:被设置为PCL安装的头文件和依赖头文件的目录
    14. # PCL_LIBRARIES:被设置成所建立和安装的PCL库头文件
    15. # PCL_LIBRARIES_DIRS:被设置成PCL库和第三方依赖的头文件所在的目录
    16. # PCL_VERSION:所找到的PCL的版本
    17. # PCL_COMPONENTS:列出所有可用的组件
    18. # PCL_DEFINITIONS:列出所需要的预处理器定义和编译器标志
    19. include_directories(${PCL_INCLUDE_DIRS})
    20. link_directories(${PCL_LIBRARIES_DIRS})
    21. add_definitions(${PCL_DEFINITIONS})
    22. #这句话告诉CMake从单个源文件write_pcd建立一个可执行文件
    23. add_executable(write_pcd write_pcd.cpp)
    24. #虽然包含了PCL的头文件,因此编译器知道我们现在访问所用的方法,我们也需要让链接器知道所链接的库,PCL找到库文件由
    25. #PCL_COMMON_LIBRARIES变量指示,通过target_link_libraries这个宏来出发链接操作
    26. target_link_libraries(write_pcd ${PCL_COMMON_LIBRARIES} ${PCL_IO_LIBRARIES})

    方式一:之后就 cd   到文件下

                       mkdir  build

                       cd build

                       cmake ..

                       make

    生成可执行文件后执行的结果:

    VS系统:

    创建2个文件夹:source和build

    放置CMakeLists.txt和write_pcd.cpp在source下

    打开cmake

    设置路径

  • 相关阅读:
    基于复合粒子群优化的模糊神经预测控制的研究(Matlab代码实现)
    Anaconda创建新环境以及应用到Pycharm项目中
    [附源码]java毕业设计疫情状况下生活物资集体团购系统
    八皇后问题的Java实现
    重装系统 + C盘怎么设置 (如何设置将电脑软件安装在非c 盘)
    抽象类 or 接口
    Web前端大作业html+css静态页面--掌****有限公司
    ElasticSearch 拼音插件elasticsearch-analysis-pinyin + IK 分词器
    QFramework 常用
    (2022版)一套教程搞定k8s安装到实战 | Ingress
  • 原文地址:https://blog.csdn.net/weixin_45295333/article/details/132577653