ply2pcd

tech2023-07-17  85

ply2pcd.cpp

#include <pcl/io/pcd_io.h> #include <pcl/io/ply_io.h> #include <pcl/console/print.h> #include <pcl/console/parse.h> #include <pcl/console/time.h> using namespace pcl; using namespace pcl::io; using namespace pcl::console; void printHelp (int, char **argv) { print_error ("Syntax is: %s [-format 0|1] input.ply output.pcd\n", argv[0]); } bool loadCloud (const std::string &filename, pcl::PCLPointCloud2 &cloud) { TicToc tt; print_highlight ("Loading "); print_value ("%s ", filename.c_str ()); pcl::PLYReader reader; tt.tic (); if (reader.read (filename, cloud) < 0) return (false); print_info ("[done, "); print_value ("%g", tt.toc ()); print_info (" ms : "); print_value ("%d", cloud.width * cloud.height); print_info (" points]\n"); print_info ("Available dimensions: "); print_value ("%s\n", pcl::getFieldsList (cloud).c_str ()); return (true); } void saveCloud (const std::string &filename, const pcl::PCLPointCloud2 &cloud, bool format) { TicToc tt; tt.tic (); print_highlight ("Saving "); print_value ("%s ", filename.c_str ()); pcl::PCDWriter writer; writer.write (filename, cloud, Eigen::Vector4f::Zero (), Eigen::Quaternionf::Identity (), format); print_info ("[done, "); print_value ("%g", tt.toc ()); print_info (" ms : "); print_value ("%d", cloud.width * cloud.height); print_info (" points]\n"); } /* ---[ */ int main (int argc, char** argv) { print_info ("Convert a PLY file to PCD format. For more information, use: %s -h\n", argv[0]); if (argc < 3) { printHelp (argc, argv); return (-1); } // Parse the command line arguments for .pcd and .ply files std::vector<int> pcd_file_indices = parse_file_extension_argument (argc, argv, ".pcd"); std::vector<int> ply_file_indices = parse_file_extension_argument (argc, argv, ".ply"); if (pcd_file_indices.size () != 1 || ply_file_indices.size () != 1) { print_error ("Need one input PLY file and one output PCD file.\n"); return (-1); } // Command line parsing bool format = 1; parse_argument (argc, argv, "-format", format); print_info ("PCD output format: "); print_value ("%s\n", (format ? "binary" : "ascii")); // Load the first file pcl::PCLPointCloud2 cloud; if (!loadCloud (argv[ply_file_indices[0]], cloud)) return (-1); // Convert to PLY and save saveCloud (argv[pcd_file_indices[0]], cloud, format); return (0); }

CMakeLists.txt

cmake_minimum_required(VERSION 2.8 FATAL_ERROR) project(ply2pcd) find_package(PCL 1.7 REQUIRED) include_directories(${PCL_INCLUDE_DIRS}) link_directories(${PCL_LIBRARY_DIRS}) add_definitions(${PCL_DEFINITIONS}) add_executable (ply2pcd ply2pcd.cpp) target_link_libraries (ply2pcd ${PCL_LIBRARIES})

 

最新回复(0)