kd树

kd树例程实现

写给第一次用pcl的朋友,帮着入个门。因为要用到kd树,所以用kd树做例子分享一下简易入门系列。

途径

配镜环境

生成

1.途径

我买的是《点云库pcl从入门到精通》这本书,写的挺好;还可以从官网的Tutorials里直接看,非常全面,初学者建议先看它。
官网地址:(http://www.pclcn.org/)
按步骤点就可以:按步骤点进去就可以
在这里插入图片描述
在里面找到相应需要的模块,直接复制代码就可以了。

2.配置环境

可以自己配置也可以用cmake配置,因为自己配置太麻烦,需要的可以私聊我,我告诉你怎么做。这里我用cmake
新建三个文件,如下图所示:
在这里插入图片描述
在CmakeLists里面添加如下内容:
**

cmake_minimum_required(VERSION 2.8 FATAL_ERROR) project(kdtree_search)
find_package(PCL 1.2 REQUIRED)
include_directories( P C L I N C L U D E D I R S ) l i n k d i r e c t o r i e s ( {PCL_INCLUDE_DIRS}) link_directories( PCLINCLUDEDIRS)linkdirectories({PCL_LIBRARY_DIRS})
add_definitions(${PCL_DEFINITIONS}) add_executable (kdtree_search
kdtree_search.cpp) target_link_libraries (kdtree_search
${PCL_LIBRARIES})

**
.cpp里面添加

#include <pcl/point_cloud.h>
#include <pcl/kdtree/kdtree_flann.h>

#include
#include
#include

int main (int argc, char** argv) { srand (time (NULL));

pcl::PointCloudpcl::PointXYZ::Ptr cloud (new
pcl::PointCloudpcl::PointXYZ);

// Generate pointcloud data cloud->width = 1000; cloud->height =
1; cloud->points.resize (cloud->width * cloud->height);

for (std::size_t i = 0; i < cloud->size (); ++i) {
(*cloud)[i].x = 1024.0f * rand () / (RAND_MAX + 1.0f);
(*cloud)[i].y = 1024.0f * rand () / (RAND_MAX + 1.0f);
(*cloud)[i].z = 1024.0f * rand () / (RAND_MAX + 1.0f); }

pcl::KdTreeFLANNpcl::PointXYZ kdtree;

kdtree.setInputCloud (cloud);

pcl::PointXYZ searchPoint;

searchPoint.x = 1024.0f * rand () / (RAND_MAX + 1.0f);
searchPoint.y = 1024.0f * rand () / (RAND_MAX + 1.0f); searchPoint.z
= 1024.0f * rand () / (RAND_MAX + 1.0f);

// K nearest neighbor search

int K = 10;

std::vector pointIdxNKNSearch(K); std::vector
pointNKNSquaredDistance(K);

std::cout << “K nearest neighbor search at (” << searchPoint.x
<< " " << searchPoint.y
<< " " << searchPoint.z
<< “) with K=” << K << std::endl;

if ( kdtree.nearestKSearch (searchPoint, K, pointIdxNKNSearch,
pointNKNSquaredDistance) > 0 ) {
for (std::size_t i = 0; i < pointIdxNKNSearch.size (); ++i)
std::cout << " " << (*cloud)[ pointIdxNKNSearch[i] ].x
<< " " << (*cloud)[ pointIdxNKNSearch[i] ].y
<< " " << (*cloud)[ pointIdxNKNSearch[i] ].z
<< " (squared distance: " << pointNKNSquaredDistance[i] << “)” << std::endl; }

// Neighbors within radius search

std::vector pointIdxRadiusSearch; std::vector
pointRadiusSquaredDistance;

float radius = 256.0f * rand () / (RAND_MAX + 1.0f);

std::cout << “Neighbors within radius search at (” << searchPoint.x
<< " " << searchPoint.y
<< " " << searchPoint.z
<< “) with radius=” << radius << std::endl;

if ( kdtree.radiusSearch (searchPoint, radius, pointIdxRadiusSearch,
pointRadiusSquaredDistance) > 0 ) {
for (std::size_t i = 0; i < pointIdxRadiusSearch.size (); ++i)
std::cout << " " << (*cloud)[ pointIdxRadiusSearch[i] ].x
<< " " << (*cloud)[ pointIdxRadiusSearch[i] ].y
<< " " << (*cloud)[ pointIdxRadiusSearch[i] ].z
<< " (squared distance: " << pointRadiusSquaredDistance[i] << “)” << std::endl; }

return 0; }

3.生成

做好上述之后,打开cmake
如下图所示,进行正确配置,变红不要害怕,再点击依次配置就好了,不红了就点生成。会显示最下面的两个done。
在这里插入图片描述
然后打开这个,点击生成,如果生成不成功,点击重新生成方案,还不成功,就点生成–配置管理器,勾选全部之后,再重新生成。生成之后,就在下图Release文件夹下出现了一个应用程序。
在这里插入图片描述
在这里插入图片描述
打开这个应用程序,可以用cmd。windows+r,再输入cmd,打开界面,找到应用程序所在路径,输入应用程序名,就可以打开了。如下图:在这里插入图片描述
如果cmd打开后路径不同,就cd,一路cd下去就可以了。

结语

原理方面各种博客写的很详细了,我在这里就不做说明了,如果觉得我这更加靠谱就私聊我或者在下方评论下想让我再补充些什么。大家如果觉得内容可靠能实现,还请点赞评论收藏三连,让文章能更快的被其他伙伴看到。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_40890867

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值