2017-04-06 25 views
1

以下の関数は結果を生成しません。言い換えれば、ポイントクラウドのポイント数は、ダウンサンプリング前のポイント数とまったく同じです。私は葉のサイズを0.01から、あなたが以下に見るものまで様々な数を試しましたが、それらのすべてが同じ結果を生み出しています。私はpcl::PointCloud<T>からpcl::PCLPointCloud2へのコンバージョンを目にしていたので、ここで問題が起きていると思われます。pcl :: VoxelGridを使用したPCLダウンサンプル

似たような問題があった場合は教えてください。 ありがとうございます。

typedef pcl::PointCloud<pcl::PointXYZ>::Ptr PointCloudPtr; 

void PlantVis::downsample(PointCloudPtr cloud) { 
    pcl::PCLPointCloud2::Ptr cloud2(new pcl::PCLPointCloud2()); 
    pcl::toPCLPointCloud2(*cloud, *cloud2); 

    pcl::PCLPointCloud2::Ptr cloud_filtered(new pcl::PCLPointCloud2()); 

    pcl::VoxelGrid<pcl::PCLPointCloud2> sor; 
    sor.setInputCloud(cloud2); 
    sor.setLeafSize(500000000.01f, 500000000.01f, 500000000.01f); 
    sor.filter(*cloud_filtered); 

    pcl::PointCloud<pcl::PointXYZ>::Ptr m_cloud(new pcl::PointCloud<pcl::PointXYZ>); 
    pcl::fromPCLPointCloud2(*cloud_filtered, *m_cloud); 
    cloud = m_cloud; 
} 

答えて

1

なぜすべての変換が必要ですか?

void PlantVis::downsample(PointCloudPtr cloud) { 
    PointCloudPtr output(new pcl::PointCloud<pcl::PointXYZ>); 
    pcl::VoxelGrid<pcl::PointXYZ> sor; 
    sor.setInputCloud(input_cloud); 
    sor.setLeafSize(0.001f, 0.001f, 0.001f); 
    sor.filter(*output); 

    //display or do something else with output 
} 
+0

ありがとうございます。あなたがコードは私が以前見落としたことを示しました。 – Illia

1

ポインタの値を変更しても、関数の引数はポインタですが、元の雲は影響を受けません。このような関数定義で参照を使用してみてください

void PlantVis::downsample(PointCloudPtr &cloud)