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

匿名 (未验证) 提交于 2019-12-02 23:43:01

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

环境搭载:ubuntu16.04

之后正式操作具体如下:
在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 line 	po::variables_map vm; 	po::store(po::parse_command_line(argc, argv, desc), vm);   	// Print help 	if (vm.count("help")) 	{ 		cout << desc << "\n"; 		return false; 	}   	// Process options. 	po::notify(vm);   	// 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); } 

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) 

现在开始编译
直接上图,代码最后给出可以复制的

执行完cmake…
make
然后输入i=1;for x in /home/wzf/PointCloud/bin2pcd/velodyne/bin/*.bin; do /home/wzf/PointCloud/bin2pcd/build/bin2pcd --infile xoutfile/home/wzf/PointCloud/bin2pcd/velodyne/pcd/x --outfile /home/wzf/PointCloud/bin2pcd/velodyne/pcd/i.pcd; let i=i+1; done

/home/wzf/PointCloud/bin2pcd/velodyne/bin/*.bin 是储存 .bin文件的路径;
/home/wzf/PointCloud/bin2pcd/build/bin2pcd 是可执行程序的路径;
/home/wzf/PointCloud/bin2pcd/velodyne/pcd/$i.pcd 是放转换后的pcd文件的路径。

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

文章来源: https://blog.csdn.net/RNG_uzi_/article/details/92165132
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!