《PCL》点云体素化求其体素中心

代码留存、以供候用

#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;
}

版权声明:本文为sinat_38792591原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。