4-1點雲建置OcTree
程式說明:
範例程式:
#include <iostream#62
#include <pcl/io/pcd_io.h#62
#include <pcl/visualization/cloud_viewer.h#62
#include <pcl/octree/octree_pointcloud.h#62
#include <pcl/octree/octree_search.h#62
int main(int argc, char** argv)
{
       pcl::PointCloud
   	pcl::io::loadPCDFile("points.pcd", *showPoints);
   	pcl::visualization::CloudViewer viewer("Clouds");
   	viewer.showCloud(showPoints);
   	float resolution = 0.03;
   	pcl::octree::OctreePointCloudSearch
   	double minX = 0.0;
   	double minY = 0.0;
   	double minZ = 0.0;
   	double maxX = 0.0;
   	double maxY = 0.0;
   	double maxZ = 0.0;
   	octreePoint.setInputCloud(showPoints);
   	octreePoint.addPointsFromInputCloud();
   	octreePoint.getBoundingBox(minX, minY, minZ, maxX, maxY, maxZ);
   	float xLength = (float)abs(maxX - minX);
   	float yLength = (float)abs(maxY - minY);
   	float zLength = (float)abs(maxZ - minZ);
   	float volume = xLength*yLength*zLength;
   	int K = 10;
   	pcl::PointXYZRGB searchPointKNN;
   	searchPointKNN.x = 0.0;
   	searchPointKNN.y = 0.0;
   	searchPointKNN.z = 0.6;
   	std::vector
   	std::vector
   	if (octreePoint.nearestKSearch(searchPointKNN, K, pointIdxNKNSearch, pointNKNSquaredDistance) > 0)
   	{
      		for (size_t i = 0; i < pointIdxNKNSearch.size(); ++i)
      			std::cout << "nearestKSearch: " << showPoints->points[pointIdxNKNSearch[i]].x
      			<< " " << showPoints->points[pointIdxNKNSearch[i]].y
      			<< " " << showPoints->points[pointIdxNKNSearch[i]].z
      			<< " (squared distance: " << pointNKNSquaredDistance[i] << ")" << std::endl;
   	}
   	std::vector
   	std::vector
   	float radius = 0.99;
   	pcl::PointXYZRGB searchPoint;
   	searchPoint.x = 0.0;
   	searchPoint.y = 0.0;
   	searchPoint.z = 0.6;
   	if (octreePoint.radiusSearch(searchPoint, radius, pointIdxRadiusSearch, pointRadiusSquaredDistance) > 0)
   	{
      		for (size_t i = 0; i < pointIdxRadiusSearch.size(); ++i)
      			std::cout << "radiusSearch: " << showPoints->points[pointIdxRadiusSearch[i]].x
      			<< " " << showPoints->points[pointIdxRadiusSearch[i]].y
      			<< " " << showPoints->points[pointIdxRadiusSearch[i]].z
      			<< " (squared distance: " << pointRadiusSquaredDistance[i] << ")" << std::endl;
   	}
   	while (!viewer.wasStopped()) 
   	{
      		//因為這邊是和visualization的視窗同步跑,所以可以在之中執行一些處理
   	}
   	return 0;
}