2015-04-29 3 views
1

Я сохранил 85 точек облаков на hdd. Я хочу открыть все облака и сохранить их в векторе/массиве.
Как мне это сделать?PCL Как создать массив/вектор Point Cloud?

Что я тестировал без успеха:

define _CRT_SECURE_NO_WARNINGS 
    #include <pcl/io/pcd_io.h> 
    #include <pcl/point_types.h> 
    #include <pcl/registration/icp.h> 
    #include <pcl/visualization/pcl_visualizer.h> 
    #include <pcl/common/transforms.h> 
    #include <pcl/filters/voxel_grid.h> 
    #include <pcl/filters/radius_outlier_removal.h> 

    #include <Eigen/Geometry> 


    #include <iostream> 
    #include <string> 

    using namespace pcl; 
    using namespace std; 

    int main(int argc, char** argv) 
    { 
    //Create Point Clouds 
    PointCloud<PointXYZ>::Ptr sourceCloud(new PointCloud<PointXYZ>); 

    vector < PointCloud<PointXYZ>::Ptr, Eigen::aligned_allocator <PointCloud <PointXYZ>::Ptr > > sourceClouds; 

    //save PointClouds to array 
    for (int i = 1; i < (argc - 1); i++) 
    { 
     if (io::loadPCDFile<PointXYZ>(argv[i], *sourceCloud) != 0) 
     { 
      return -1; 
     } 
     cout << "Loaded file " << argv[i] << " (" << sourceCloud->size() << " points)" << endl; 
     sourceClouds.push_back(sourceCloud); 
     cout << "Point Cloud " << i-1 << "has got " << sourceClouds[i-1]->size() << " Points" << endl; 
     sourceCloud->clear(); 
    } 

    for (int i = 0; i < sourceClouds.size() - 1; i++) 
    { 
     cout << "Point Cloud " << i << "has got " << sourceClouds[i]->size() << " Points" << endl; 
    } 
    } 

В первом для цикла, PointCloudSize с обеих Clouuds одинаковы, но во втором для цикла, PointCloudSize 0.
Что я я делаю неправильно?

ответ

1
sourceClouds.push_back(sourceCloud); 

Эта строка копирует только PointCloud :: Ptr и не копирует данные облака точек.

попробовать это:

int main(int argc, char** argv) 
    { 
    //Create Point Clouds 
    //PointCloud<PointXYZ>::Ptr sourceCloud(new PointCloud<PointXYZ>); 

    vector < PointCloud<PointXYZ>::Ptr, Eigen::aligned_allocator <PointCloud <PointXYZ>::Ptr > > sourceClouds; 

    //save PointClouds to array 
    for (int i = 1; i < (argc - 1); i++) 
    { 
     PointCloud<PointXYZ>::Ptr sourceCloud(new PointCloud<PointXYZ>); 
     if (io::loadPCDFile<PointXYZ>(argv[i], *sourceCloud) != 0) 
     { 
      return -1; 
     } 
     cout << "Loaded file " << argv[i] << " (" << sourceCloud->size() << " points)" << endl; 
     sourceClouds.push_back(sourceCloud); 
     cout << "Point Cloud " << i-1 << "has got " << sourceClouds[i-1]->size() << " Points" << endl; 
     // sourceCloud->clear(); 
    } 

    for (int i = 0; i < sourceClouds.size() - 1; i++) 
    { 
     cout << "Point Cloud " << i << "has got " << sourceClouds[i]->size() << " Points" << endl; 
    } 
    } 
Смежные вопросы