pcd2ply

tech2023-07-23  87

pcd2ply.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] [-use_camera 0|1] input.pcd output.ply\n", argv[0]); } bool loadCloud (const std::string &filename, pcl::PCLPointCloud2 &cloud) { TicToc tt; print_highlight ("Loading "); print_value ("%s ", filename.c_str ()); tt.tic (); if (loadPCDFile (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 binary, bool use_camera) { TicToc tt; tt.tic (); print_highlight ("Saving "); print_value ("%s ", filename.c_str ()); pcl::PLYWriter writer; writer.write (filename, cloud, Eigen::Vector4f::Zero (), Eigen::Quaternionf::Identity (), binary, use_camera); 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 PCD file to PLY 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 PCD file and one output PLY file.\n"); return (-1); } // Command line parsing bool format = true; bool use_camera = true; parse_argument (argc, argv, "-format", format); parse_argument (argc, argv, "-use_camera", use_camera); print_info ("PLY output format: "); print_value ("%s, ", (format ? "binary" : "ascii")); print_value ("%s\n", (use_camera ? "using camera" : "no camera")); // Load the first file pcl::PCLPointCloud2 cloud; if (!loadCloud (argv[pcd_file_indices[0]], cloud)) return (-1); // Convert to PLY and save saveCloud (argv[ply_file_indices[0]], cloud, format, use_camera); return (0); }

CMakeLists.txt

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

 

最新回复(0)