欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

pcl 保存点云.ply 格式 or .pcd格式

程序员文章站 2022-03-30 22:02:17
...

转自:http://www.pcl-users.org/pcl-io-savePLYFile-crashing-in-Visual-studio-td4042792.html

I installed pcl on windows machine today as i intend to use it in a mex function for my matlab project and wanted a working windows version of pcl. i ran a sample code shown below to generate 50 points and save them in a PCD and PLY file. However, for some reaosn savePLYFILE is crashing my program while savePCDFILE works fine. I am at a loss to epxlain this ( i do need my PC in ply format so i can open them in meshlab).  Here is the code: 

#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/io/ply_io.h>
#include <pcl/point_types.h>
#include <pcl/common/io.h>
#include <pcl/impl/point_types.hpp>
#include <pcl/point_cloud.h>


int  main (int argc, char** argv) 
{ 
  pcl::PointCloud<pcl::PointXYZ> cloud; 
  pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_ptr = pcl::PointCloud<pcl::PointXYZ>::Ptr (new pcl::PointCloud<pcl::PointXYZ>); 
  // Fill in the cloud data 
  cloud.width    = 50; 
  cloud.height   = 1; 
  cloud.is_dense = false; 
  cloud.points.resize (cloud.width * cloud.height); 
  
  cloud_ptr->width = cloud.width ; 
  cloud_ptr->height = cloud.height; 
  cloud_ptr->is_dense = cloud.is_dense; 
 // cloud_ptr->points.resize (cloud.width * cloud.height); 

  for (size_t i = 0; i < cloud.points.size (); ++i) 
  { 
   // cloud.points[i].x = 1024 * rand () / (RAND_MAX + 1.0f); 
   // cloud.points[i].y = 1024 * rand () / (RAND_MAX + 1.0f); 
   // cloud.points[i].z = 1024 * rand () / (RAND_MAX + 1.0f); 

        pcl::PointXYZ p; 
        p.x = 1024 * rand () / (RAND_MAX + 1.0f); 
        p.y = 1024 * rand () / (RAND_MAX + 1.0f); 
        p.z = 1024 * rand () / (RAND_MAX + 1.0f); 
        cloud.points[i].x = p.x; 
        cloud.points[i].y = p.y; 
        cloud.points[i].z = p.z; 

        cloud_ptr->points.push_back(p); 
  } 
  std::cerr << "Saving to pcd file " << std::endl; 
  pcl::io::savePCDFileASCII ("test_pcd0.pcd", cloud); 
  pcl::io::savePCDFile ("test_pcd1.pcd", *cloud_ptr); 
  std::cerr << "Saved " << cloud.points.size () << " data points to test_pcd.pcd." << std::endl; 

  std::cerr << "Saving to ply file " << std::endl; 
  pcl::io::savePLYFile ("test_ply.ply", cloud); 

  for (size_t i = 0; i < cloud.points.size (); ++i){ 
  //  std::cerr << "    " << cloud.points[i].x << " " << cloud.points[i].y << " " << cloud.points[i].z << std::endl; 
          std::cerr << "    " << cloud_ptr->points[i].x << " " << cloud_ptr->points[i].y << " " << cloud_ptr->points[i].z << std::endl; 
  } 

  return (0); 
}