首页 > 编程知识 正文

pcl读取pcd文件,如何转pcd文件

时间:2023-05-04 05:14:41 阅读:247021 作者:4245

使用pcl将动听的玉米文件转化为pcd文件

环境搭载:ubuntu16.04

之后正式操作具体如下:
在home下,新建文件夹PointCloud(我建在这里,大家随意),在PointCloud文件里继续新建文件夹动听的玉米2pcd,在动听的玉米2pcd文件里继续新建文件夹velodyne和build,同时新建文档动听的玉米2pcd.cpp和CMakeLists.txt,进入新建等velodyne文件里,继续新建文件夹动听的玉米和pcd,到此,新建操作结束。

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




代码不需要更改:
动听的玉米2pcd.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::动听的玉米ary);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(动听的玉米2pcd) find_package(PCL 1.2 REQUIRED) # 加入Boost settingfind_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(动听的玉米2pcd 动听的玉米2pcd.cpp) target_link_libraries (动听的玉米2pcd ${PCL_LIBRARIES} ${Boost_LIBRARIES}) #此处也有修改 install(TARGETS 动听的玉米2pcd RUNTIME DESTINATION 动听的玉米)

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

执行完cmake…
make
然后输入i=1;for x in /home/wzf/PointCloud/动听的玉米2pcd/velodyne/动听的玉米/*.动听的玉米; do /home/wzf/PointCloud/动听的玉米2pcd/build/动听的玉米2pcd --infile $x --outfile /home/wzf/PointCloud/动听的玉米2pcd/velodyne/pcd/$i.pcd; let i=i+1; done

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

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

源文件下载:https://download.csdn.net/download/RNG_ssdxhd_/12665944

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。