点云处理:bin二进制文件转pcd文件

一、二进制文件说明

在这里插入图片描述
点云数据以浮点二进制文件格式存储,每行包含8个数据,每个数据由四位十六进制数表示(浮点数),每个数据通过空格隔开。一个点云数据由四个浮点数数据构成,分别表示点云的x、y、z、r(强度 or 反射值),点云的存储方式如下表所示:
即每行包含两点的XYZI,那么只需要对一个点赋值对应的XYZI值,并将该点压入点云中即可。
在这里插入图片描述

二、代码

#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;

void topcd(string name);
void topcd(string name) {
	//string name = "0000000000";
	///The file to read from.
	string infile = "D:/数据集/道路点云数据集/2011_09_26/2011_09_26_drive_0070/velodyne_points/data/" + name + ".bin";

	///The file to output to.
	string outfile = "D:/数据集/道路点云数据集/2011_09_26/2011_09_26_drive_0070/velodyne_points/pcddata/" + name + ".pcd";

	// load point cloud
	fstream 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 features
	writer.write<PointXYZI>(outfile, *points, false);
}
int main(int argc, char** argv) {
	string name;
	for (int i = 0; i < 420; i++) {
		stringstream ss;
		ss << setw(10) << setfill('0') << i;
		string str;
		ss >> str;         //将字符流传给 str
		topcd(str);
	}
	return 0;
}

结果如下:

根据data文件夹下的二进制文件生成了对应点云数据。
二进制文件
二进制文件
pcd文件
在这里插入图片描述
pcd文件简单显示:
在这里插入图片描述

三、注意

需要适应于自己的文件名和文件夹哦!

  • 4
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值