从KITTI下载的数据是二进制bin格式,但是pcl似乎只能读取pcd文件,为了可视化,先将bin文件转换为pcd文件。

在home下,新建文件夹PointCloud(我建在这里,大家随意),在PointCloud文件里继续新建文件夹bin2pcd,在bin2pcd文件里继续新建文件夹velodyne和build,同时新建文档bin2pcd.cpp和CMakeLists.txt,进入新建等velodyne文件里,继续新建文件夹bin和pcd,到此,新建操作结束。

然后将测试的bin文件放入velodyne里的bin文件夹里,我这里只放了7个bin文件。接着把空文档bin2pcd.cpp和CMakeLists.tx的代码补上,代码以及上述操作,如下列图示:


源码

bin2pcd.cpp

#include <boost/program_options.hpp>
#include <pcl/point_types.h>
#include <pcl/io/pcd_io.h>
#include <pcl/common/point_operators.h>
#include <pcl/common/io.h>
#include <pcl/search/organized.h>
#include <pcl/search/octree.h>
#include <pcl/search/kdtree.h>
#include <pcl/features/normal_3d_omp.h>
#include <pcl/filters/conditional_removal.h>
#include <pcl/segmentation/sac_segmentation.h>
#include <pcl/segmentation/extract_clusters.h>
#include <pcl/surface/gp3.h>
#include <pcl/io/vtk_io.h>
#include <pcl/filters/voxel_grid.h>#include <iostream>
#include <fstream>using namespace pcl;
using namespace std;namespace po = boost::program_options;int main(int argc, char **argv){///The file to read from.string infile;///The file to output to.string outfile;// Declare the supported options.po::options_description desc("Program options");desc.add_options()//Options("infile", po::value<string>(&infile)->required(), "the file to read a point cloud from")("outfile", po::value<string>(&outfile)->required(), "the file to write the DoN point cloud & normals to");// Parse the command linepo::variables_map vm;po::store(po::parse_command_line(argc, argv, desc), vm);// Print helpif (vm.count("help")){cout << desc << "\n";return false;}// Process options.po::notify(vm);// load point cloudfstream input(infile.c_str(), ios::in | ios::binary);if(!input.good()){cerr << "Could not read file: " << infile << endl;exit(EXIT_FAILURE);}input.seekg(0, ios::beg);pcl::PointCloud<PointXYZI>::Ptr points (new pcl::PointCloud<PointXYZI>);int i;for (i=0; input.good() && !input.eof(); i++) {PointXYZI point;input.read((char *) &point.x, 3*sizeof(float));input.read((char *) &point.intensity, sizeof(float));points->push_back(point);}input.close();cout << "Read KTTI point cloud with " << i << " points, writing to " << outfile << endl;pcl::PCDWriter writer;// Save DoN featureswriter.write<PointXYZI> (outfile, *points, false);
}

CMakeLists.txt

cmake_minimum_required(VERSION 3.5)
project(bin2pcd)find_package(PCL 1.2 REQUIRED)# 加入Boost setting
find_package(Boost COMPONENTS program_options REQUIRED )
include_directories(${Boost_INCLUDE_DIRS})
link_directories(${Boost_LIBRARY_DIRS})include_directories(${PCL_INCLUDE_DIRS})
link_directories(${PCL_LIBRARY_DIRS})
add_definitions(${PCL_DEFINITIONS})add_executable(bin2pcd bin2pcd.cpp)target_link_libraries (bin2pcd ${PCL_LIBRARIES} ${Boost_LIBRARIES}) #此处也有修改install(TARGETS bin2pcd RUNTIME DESTINATION bin)

进入build,打开终端

cmake ..
make -j8
i=1;for x in /home/xxxxx/Desktop/work/pcl_project/PointCloud/bin2pcd/velodyne/bin/*.bin; do /home/xxxxx/Desktop/work/pcl_project/PointCloud/bin2pcd/build/bin2pcd --infile $x --outfile /home/xxxxx/Desktop/work/pcl_project/PointCloud/bin2pcd/velodyne/pcd/$i.pcd; let i=i+1; done
  • for x in your/input/data/*.bin 这是一个循环遍历所有的输入bin文件,每次将一个bin文件的绝对路径传给x
  • do build/bin2pcd 是运行前面生成的bin2pcd文件,路径根据实际情况调整
  • –infile 是输入文件,–outfile 是输出文件
  • i 是输出文件的名称,i=KaTeX parse error: Expected '}', got '#' at position 3: {x#̲*b}是表示截取x中第一个“_”(下划线)后的字符串

注意:/home/xxxxx/Desktop/work/pcl_project 改成你自己工程路径
测试成功!

所有代码成功执行后,查看velodyne文件下的pcd文件夹,会发现生成里pcd文件,如下图:

参考

1、https://www.manongdao.com/article-955482.html
2、https://blog.csdn.net/qq_35491306/article/details/82903371
3、https://blog.csdn.net/MAX_Hope/article/details/100023615

点云学习笔记19——使用pcl将bin文件转化为pcd文件相关推荐

  1. 点云学习笔记7——python pcl将点云数据转换成俯视图(鸟瞰图)

    点云学习笔记7--python pcl将点云数据转换成俯视图(鸟瞰图) 环境安装 点云数据 代码 效果图 参考 环境安装 可以参考我另外一篇文章: 点云学习笔记3--点云库(PCL)安装与测试教程 点 ...

  2. 使用pcl将bin文件转化为pcd文件

    使用pcl将bin文件转化为pcd文件 环境搭载:ubuntu16.04 之后正式操作具体如下: 在home下,新建文件夹PointCloud(我建在这里,大家随意),在PointCloud文件里继续 ...

  3. 点云学习笔记15——PCL常用的基础代码

    点云学习笔记15--PCL基础 命名规范 常用代码 1.时间计算 2.pcl::PointCloud::Ptr和pcl::PointCloud的两个类相互转换 3.如何查找点云的x,y,z的极值? 4 ...

  4. Ext.Net学习笔记19:Ext.Net FormPanel 简单用法

    Ext.Net学习笔记19:Ext.Net FormPanel 简单用法 FormPanel是一个常用的控件,Ext.Net中的FormPanel控件同样具有非常丰富的功能,在接下来的笔记中我们将一起 ...

  5. springmvc学习笔记(19)-RESTful支持

    springmvc学习笔记(19)-RESTful支持 标签: springmvc springmvc学习笔记19-RESTful支持 概念 REST的样例 controller REST方法的前端控 ...

  6. 区块链学习笔记19——ETH难度调整

    区块链学习笔记19--ETH难度调整 学习视频:北京大学肖臻老师<区块链技术与应用> 笔记参考:北京大学肖臻老师<区块链技术与应用>公开课系列笔记--目录导航页 前面学过,比特 ...

  7. Learning ROS for Robotics Programming Second Edition学习笔记(七) indigo PCL xtion pro live

    中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS forRobotics Pro ...

  8. 【14天鸿蒙设备开发实战-第七章 设备联网上云 学习笔记】

    14天鸿蒙设备开发实战-第七章 设备联网上云 学习笔记 一.开发环境.平台与硬件需求 二.华为IoT平台API 2.1 初始化 2.1.1 设备信息初始化 2.1.2 华为IoT平台 初始化 2.1. ...

  9. 点云学习笔记11——VoxelNet算法+代码运行

    点云学习笔记11--VoxelNet算法+代码运行 一.算法分析 摘要 介绍 相关工作 1.2. 贡献 2.VoxelNet 2.1.特征学习网络 2.1.1 特征学习网络 二.代码复现 2.1.环境 ...

最新文章

  1. python动态时钟代码_Python基础 用Python实现时钟
  2. SQL常用字符串函数
  3. IDEA编译时出现 Information:java: javacTask: 源发行版 1.8 需要目标发行版 1.8
  4. BZOJ 1612: [Usaco2008 Jan]Cow Contest奶牛的比赛【Floyd】
  5. [elixir观察] GenStage 与 Flow
  6. python代码测试_Python入门学习系列——Python代码测试
  7. 【汇编语言与计算机系统结构笔记05】汇编的系统结构,从C代码生产汇编代码,一个具体的、经典的数据传送指令(mov)实例与分析
  8. Unity3D 热更新方案(集合各位专家的汇总)
  9. 一个简单的dos命令实现无限弹窗,卡死电脑
  10. 配置阿里云镜像加速器
  11. 容器监控cadvisor
  12. SpringCloud、RabbitMQ、Websocket集群搭建以及集群通信
  13. FTP 打开文件夹提示该文件没有程序与之关联来执行该操作 请在控制面板的文件夹选项中创建关联
  14. CentOS 7.2设置中英文环境
  15. Leetcode 2233. Maximum Product After K Increments
  16. react中使用ECharts绘制各省市地图
  17. Codeforces Global Round 21) C. Fishingprince Plays With Array
  18. 无线洗地机哪款性价比高?高性价比的洗地机分享
  19. python+airtest+夜神模拟器自动化测试
  20. 打工还是创业?思路决定出路!

热门文章

  1. 构图 -- F. DIY Garland
  2. 计算机系统实验1:数据实验datalab
  3. 每日三个笑话-20151014
  4. 电脑重启bootmgr_开机提示bootmgr is compressed无法启动的方法,看完就明白了
  5. ATMEGA8A-AU代理
  6. 客户至上 服务至极 ——优维服务流程标准化体系
  7. 如何用苹果app完成ipa安装
  8. java工厂模式实例(设计模式)
  9. FileUpload使用教程
  10. 【CEGUI】CEGUI入门篇之创建window(四)