《PCL点云库学习&VS2010(X64)》Part 32 计算点云中点的索引
来源:互联网 发布:ipadair2如何卸载软件 编辑:程序博客网 时间:2024/06/06 08:22
《PCL点云库学习&VS2010(X64)》Part 32 计算点云中点的索引
1、返回实际点的索引
选点后,有时并非是点云上的点,而是与屏幕交互时得到的点,该点可以打印出来,但是在点云中并没有具体的索引。所以在选取点后,我们可以将该点设置一个cloudhandle,同时设置一个RenderingPointCloudProperty,让点改变颜色,同时改变点的大小。
最后索引出该点的具体位置,具体代码如下:
#include <pcl/search/pcl_search>#include <pcl/search/kdtree>#include <vector>#include <iostream>//返回正确的点索引,不是从屏幕上交互得到的点索引pcl::search::KdTree<pcl::PointXYZ> search;search.setInputCloud(cloud);std::vector<int> indices(1);std::vector<float> distance(1);//由于VTK/OpenGL并没有存储NaN格式的数据,从而导致点无法一一对应//有必要在点云中得到实际点的索引search.nearestKseach(current_point,1,indices,distance);//其中current_point为选中的点int idx;//存储选中点的索引idx = indices[0];cout<<"选中点的实际位置: "<<idx<<endl;
2、获取关键点的索引,并将该索引存储起来
SIFT、NARF算法中,pcl无法直接提供索引(主要原因是sift点是通过计算出来的,在某些不同参数下,sift点可能并非源数据中的点,而是某些点的近似),若要获取索引,则可利用以下函数:
void getIndices (pointcloud::Ptr cloudin, pointcloud keypoints, pcl::PointIndices::Ptr indices){pcl::KdTreeFLANN<pcl::PointXYZ> kdtree;kdtree.setInputCloud(cloudin);//原始点云std::vector<int> Idx;std::vector<float>Distance; //近邻点集的距离for (size_t i =0; i < keypoints.size();i++) { kdtree.nearestKSearch(keypoints.points[i],1,Idx,Distance);// cout<<"the indieces is:"<<Idx[0]<<endl;// cout<<"the distance is:"<<Distance[0]<<endl; indices->indices.push_back(Idx[0]); }}
其思想就是:将原始数据插入到flann的kdtree中,寻找keypoints的最近邻,如果距离等于0,则说明是同一点,提取索引即可。
3、将索引点中的点云从原始点云中提取出来IndiceExtraction
其实有两种方法,在第25篇博客中都有给出:
1、CopyPointCloud函数;——第一个例子
2、IndiceExtraction函数。——第七个例子
0 0
- 《PCL点云库学习&VS2010(X64)》Part 32 计算点云中点的索引
- 《PCL点云库学习&VS2010(X64)》Part 47 鼠标选取点云坐标的计算原理
- 《PCL点云库学习&VS2010(X64)》Part 25 PCL点云操作函数汇集
- 《PCL点云库学习&VS2010(X64)》Part 22 激光雷达点云数据处理相关算法库收集
- 《PCL点云库学习&VS2010(X64)》Part 45 点云压缩算法—扫描线(DouglasPeuckerAlgorithm)
- 《PCL点云库学习&VS2010(X64)》Part 46 点云分类—画刷分类
- 《PCL点云库学习&VS2010(X64)》Part 48 基于霍夫变换的点云平面检测法
- 《PCL点云库学习&VS2010(X64)》Part 39 批处理命令设置PCL的环境变量
- 《PCL点云库学习&VS2010(X64)》Part 14 PCL1.72(VTK6.2.0)点云分割(Point Cloud Segmentation)
- 《PCL点云库学习&VS2010(X64)》Part 18 PCL1.72(VTK6.2.0)编译CloudCompare注意点
- 《PCL点云库学习&VS2010(X64)》Part 1 Installation of PCL in VS2010(x64)
- 《PCL点云库学习&VS2010(X64)》Part 4 MFC+VTK+VS2010 测试VTK的MFC对话框程序
- 《PCL点云库学习&VS2010(X64)》Part 28 BoundingBox&addArray
- 《PCL点云库学习&VS2010(X64)》Part 42 OCtreeViewer
- 《PCL点云库学习&VS2010(X64)》Part 31 pcl::PointCloud::Ptr和pcl::PointCloud相互转换
- 《PCL点云库学习&VS2010(X64)》Part 41 图形学领域的关键算法及源码链接
- 《PCL点云库学习&VS2010(X64)》Part 43 协方差矩阵的特征向量
- 《PCL点云库学习&VS2010(X64)》Part 29 PCL使用类成员函数作为pclvisualizer的回调函数
- RecycleView添加分割线(ItemDecoration)以及交互动画效果
- Nginx 安装
- jira的安装破解
- [PDA]运用远程桌面运行桌面程序
- HDU_1527 取石子游戏
- 《PCL点云库学习&VS2010(X64)》Part 32 计算点云中点的索引
- 为 Keil 更换 Sublime Text Molokai 主题
- Flex 布局教程:实例篇
- MySQL数据库水平分表策略--一致性hash
- Java强引用、 软引用
- NUMBEROF_RETRIES_NEXTSERVER_EXCEEDED、NUMBEROF_RETRIES_EXCEEDED
- DNS host区别与设置
- opencv中typedef const _InputArray& InputArray
- 《Training:Communicating with Other Fragments》