#include <iostream>
#include <pcl/point_types.h>
#include <pcl/point_cloud.h>
#include <pcl/io/pcd_io.h>
#include <pcl/features/normal_3d.h>
#include <pcl/features/boundary.h> //边界提取
#include <pcl/visualization/pcl_visualizer.h>
#include <boost/thread/thread.hpp>using namespace std;int
main()
{pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);pcl::io::loadPCDFile("d://PCD//11.pcd", *cloud);cout << "加载点云" << cloud->points.size() << "个" << endl;//------------------------计算法向量---------------------------pcl::NormalEstimation<pcl::PointXYZ, pcl::Normal> n;pcl::search::KdTree<pcl::PointXYZ>::Ptr tree(new pcl::search::KdTree<pcl::PointXYZ>);n.setInputCloud(cloud);n.setSearchMethod(tree);n.setRadiusSearch(1);pcl::PointCloud<pcl::Normal>::Ptr normals(new pcl::PointCloud<pcl::Normal>);n.compute(*normals);//-----------------------边界特征估计--------------------------pcl::BoundaryEstimation<pcl::PointXYZ, pcl::Normal, pcl::Boundary> boundEst;boundEst.setInputCloud(cloud);boundEst.setInputNormals(normals);boundEst.setRadiusSearch(3);boundEst.setAngleThreshold(M_PI / 5);//边界判断时的角度阈值boundEst.setSearchMethod(tree);pcl::PointCloud<pcl::Boundary> boundaries;boundEst.compute(boundaries);pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_boundary(new pcl::PointCloud<pcl::PointXYZ>);for (int i = 0; i < cloud->points.size(); i++){if (boundaries[i].boundary_point > 0){cloud_boundary->push_back(cloud->points[i]);}}cout << "边界点个数:" << cloud_boundary->points.size() << endl;//pcl::io::savePCDFileASCII("YY11.pcd", *cloud_boundary);//-------------------------可视化-----------------------------boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer(new pcl::visualization::PCLVisualizer("ShowCloud"));int v1(0);viewer->setWindowName("边界提取");viewer->createViewPort(0.0, 0.0, 0.5, 1.0, v1);viewer->setBackgroundColor(0, 0, 0, v1);viewer->addText("Raw point clouds", 10, 10, "v1_text", v1);int v2(0);viewer->createViewPort(0.5, 0.0, 1, 1.0, v2);viewer->setBackgroundColor(0.5, 0.5, 0.5, v2);viewer->addText("Boudary point clouds", 10, 10, "v2_text", v2);viewer->addPointCloud<pcl::PointXYZ>(cloud, "sample cloud", v1);viewer->addPointCloud<pcl::PointXYZ>(cloud_boundary, "cloud_boundary", v2);viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_COLOR, 1, 0, 0, "sample cloud", v1);viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_COLOR, 0, 1, 0, "cloud_boundary", v2);//view->addCoordinateSystem(1.0);//view->initCameraParameters();while (!viewer->wasStopped()){viewer->spinOnce(100);boost::this_thread::sleep(boost::posix_time::microseconds(100000));}return 0;
}

PCL提取点云的边界相关推荐

  1. PCLl从Vlp-16录制好的bag包提取点云数据

    本文将记录Vlp-16的使用的一些常规操作,以及报错解决方法. 查看录制的bag包信息 rosbag info out.bag 录制的bag包为out.bag保存在data文件夹下,创建文件夹存放提取 ...

  2. PCL:点云数据基于法线的边界提取(从最初的法线估计理论推导到最终的边界提取)

    该边界提取采用PCL库里边的方法,基于法线估计来实现的边界检测与提取: 首先从原始点云上计算出法线,再由法线结合数据估计出边界.(这样解释还是特别抽像吧) ------------法线求解:(平面的法 ...

  3. PCL+opencv通过2D方式提取点云边缘

    1.2D方法提取边缘的原因 如上图所示我们通过PCL常规的方法提取边缘后是有内边缘和外边缘的,假设我们需要的是外边缘可能需要做一些诸如聚类分割的方法,给我们带来许多不便. 2.2D方法的思路 熟悉op ...

  4. PCL提取3D点云模型特征(3.0 FPFH快速点特征直方图)附完整代码

    一.概述 上一篇博客解释了PFH是什么以及如何利用PFH来提取点云的特征,那么讲了PFH(PCL提取3D点云模型特征(2.0 PFH点特征直方图 )附完整代码)之后肯定是要接着说FPFH的.本来想着把 ...

  5. PCL提取3D点云模型特征(1.0 点云曲率)

    一.随便扯扯的概述 在进入到计算机图形学的研究中已经过去了好几个月了,自然免不了要跟PCL打交道.在学习PCL的过程中,越来越觉得PCL真的是个非常强大的工具,让人爱不释手,但同时也让人感到沮丧,因为 ...

  6. 【点云处理技术之PCL】点云分割算法1——平面模型分割、圆柱模型分割和欧式聚类提取(含欧式聚类原理)

    文章目录 1. 平面分割 2. 圆柱分割 3. 欧式聚类分割 1. 平面分割 下列中,先随机创建了z=1.0的随机点,然后改变其中3个点的z值.最后,使用SACMODEL_PLANE平面模型对它进行拟 ...

  7. PCL 三维点云轮廓提取

    PCL 三维点云轮廓提取 建一个pclfive文件夹,建一个pclfive.cpp文档如下: #include <iostream> #include <pcl/range_imag ...

  8. 29 基于PCL的点云平面分割拟合算法技术路线(针对有噪声的点云数据)

    0 引言 最近项目中用到了基于PCL开发的基于平面的点云和CAD模型的配准算法,点云平面提取采用的算法如下. 1 基于PCL的点云平面分割拟合算法 2 参数及其意义介绍 (1)点云下采样 1. 参数: ...

  9. 如何在三维模型中按一定密度提取点云数据(详细说明)

    最近在查提取点运数据的相关资料时,发现在三维模型中提取点云数据的资料较少,有都不适合没有基础的小白阅读,于是在本人仔细查阅资料并研读一天后总结了一种较为方便且利于没有这方面基础的小白阅读完成. 1.所 ...

  10. [自动驾驶-目标检测] C++ PCL 连通域点云聚类

    文章目录 引言 标签连通域聚类原理 Octree + LCC 代码实现 Octree + LCC 测试结果 Octree + LCC 的优缺点 改进思路 参考文献 引言 在实际实现3D目标检测时,在不 ...

最新文章

  1. mysql命令行安装报错_centos命令行安装mysql随机密码查看方法(遇到问题及其解决办法)...
  2. Android Gradle 学习笔记(四):Gradle 构建脚本
  3. VC++之自定义消息
  4. k近邻回归算法python_K近邻算法用作回归的使用介绍(使用Python代码)
  5. Python3.7.5安装(Windows10附pip更换下载源)
  6. printf输出颜色和ANSI控制码(高亮,下划线,闪烁,光标位置,清屏等)
  7. linux kill pid文件,从一次事故谈谈 pid 文件的作用
  8. 软著申请时的软件说明书如何制作
  9. hdu1114完全背包
  10. 逻辑门的Verilog实现与仿真
  11. 奇妙的 10^n + 1
  12. 怎么用wifi进e站_忘记wifi密码怎么办,用这招可以知道电脑中的wifi密码
  13. android classloader双亲托付模式
  14. Python基础15_装饰器
  15. 手机qq表白代码大全可复制_照片后期如何一键调出INS风?676个效果 VSCO滤镜大全...
  16. 本地方法栈与Native方法
  17. 2011新版工业技术 中文核心期刊目录总览
  18. 【考研数学】常用数学公式大全
  19. 层次方框图、Warnier图、IPO图
  20. 【从零开始学习YOLOv3】3. YOLOv3的数据加载机制和增强方法

热门文章

  1. 一个简单的网页设计HTML5作业
  2. 树莓派:Adafruit的I2C SSD1306 OLED驱动
  3. java常用的对象转map的几种方式
  4. 波特率和比特率的区分
  5. GET 请求参数过大导致HTTP错误码 414 / 500 的问题
  6. 高速局域网文件传输工具(速度可达20M) 的企业云盘
  7. 4.1 51单片机-定时器使用
  8. 【DevOps】软件开发生命周期
  9. 将矩阵化为上三角矩阵
  10. adb连接Android设备使用screenrecord命令录屏和screencap命令截屏