代码留存、以供候用
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <iostream>
#include <pcl/octree/octree.h>
using namespace std;
typedef pcl::PointXYZ PointT;
typedef std::vector< pcl::PointXYZ, Eigen::aligned_allocator<pcl::PointXYZ> > AlignedPointTVector; ///分配内存对齐Eigen::MatrixXf;
int main(int argc, char** argv)
{
///loading datas.
pcl::PointCloud<PointT>::Ptr cloud(new pcl::PointCloud<PointT>);
pcl::PCDReader reader;
reader.read(argv[1], *cloud);
std::cerr << "loading " << cloud->points.size() << " datas from file." << std::endl;
///searching octree voxel center.
AlignedPointTVector voxel_center_list_arg;
voxel_center_list_arg.clear(); ///clear memory
float resolution = atof(argv[2]); ///ascii to floating point numbers
pcl::octree::OctreePointCloudSearch<PointT> octree(resolution);
/// double resolution_arg = 0.05;
/// octree.setResolution(resolution_arg); 等同于上两行。
/// int treeDepth_ = octree.getTreeDepth();
/// std::cerr << "the depth of treeDepth_ is : " << treeDepth_ << std::endl;
octree.setInputCloud(cloud);
octree.addPointsFromInputCloud(); ** \brief Add points from input point cloud to octree. 4重载 */
octree.getOccupiedVoxelCenters(voxel_center_list_arg);
/// int occupiedVoxelCenters = octree.getOccupiedVoxelCenters(voxel_center_list_arg);
/// std::cerr << "the number of occupiedVoxelCenters are : " << occupiedVoxelCenters << std::endl;
std::cerr << "the number of voxel are : " << voxel_center_list_arg.size() << std::endl; ///等同于 occupiedVoxelCenters
return 0;
}