PCL学习笔记Day2

KDTree搜索树
//利用KDTree近邻搜索
//k-d树(k-dimensional树的简称),是一种分割k维数据空间的数据结构。主要应用于多维空间关键数据的搜索
// (如:范围搜索和最近邻搜索)。
//K-D树是二进制空间分割树的特殊的情况。
#include<pcl/io/pcd_io.h>
#include<pcl/point_types.h>
#include<pcl/search/kdtree.h>// 包含kdtree的头文件
using namespace std;
typedef pcl::PointXYZ PointT;
template <typename  T>// 模板函数输出
void printVector(T& a) {
	for (size_t i = 0; i < a.size(); i++)
	{
		cout << a[i] << endl;
	}
}
int main() {
	pcl::PointCloud<PointT>::Ptr cloud(new pcl::PointCloud<PointT>);
	if (pcl::io::loadPCDFile("rabbit.pcd", *cloud) == -1) {
		PCL_ERROR("打开文件失败");
		return -1;
	}
	cout << "读取点云文件的大小为:" << cloud->size() << endl;
	//定义KDTree对象
	pcl::search::KdTree<PointT>::Ptr kdtree(new pcl::search::KdTree<PointT>);
	//设置要搜索的点云
	kdtree->setInputCloud(cloud);
	// 存储查询近邻点的索引
	vector<int> indices;
	//存储近邻点对应距离的平方
	vector<float> distances;
	//初始化一个查询点
	PointT point = cloud->points[0];
	cout << "查询的初始点为:" << point << endl;
	// 查询距离point最近的k个点
	int k = 10;
	int size = kdtree->nearestKSearch(point, k, indices, distances);
	cout << "----------K近邻查询的结果为----------:" << size << endl;
	printVector<vector<int>>(indices);
	printVector<vector<float>>(distances);
	//查询半径为r的邻域内的点
	double r = 0.2;
	size = kdtree->radiusSearch(point, r, indices, distances);
	cout << "----------邻域查询的结果为-----------:" << size << endl;
	printVector<vector<int>>(indices);
	printVector<vector<float>>(distances);
	system("pause");
	return 0;
}

参考链接:https://github.com/MNewBie/PCL-Notes/blob/master/chapter2.md

https://zhuanlan.zhihu.com/p/268524083

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值