PCL 任意多边形内部点云提取
随机数
- 一、概述
- 二、代码
- 二、结果
一、概述
提取多边形内部的点。
二、代码
#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/filters/crop_hull.h>
#include <pcl/surface/concave_hull.h>
#include <pcl/surface/convex_hull.h>
#include <pcl/visualization/cloud_viewer.h>int main(int argc, char** argv)
{pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);//加载点云数据pcl::PCDReader reader;reader.read("pig2.pcd", *cloud);pcl::PointCloud<pcl::PointXYZ>::Ptr bound(new pcl::PointCloud<pcl::PointXYZ>); //创建多边形区域指针bound->push_back(pcl::PointXYZ(0.1, 0.1, 0)); //根据顶点坐标创建区域bound->push_back(pcl::PointXYZ(0.1, -0.1, 0));bound->push_back(pcl::PointXYZ(-0.1, 0.1, 0));bound->push_back(pcl::PointXYZ(-0.1, -0.1, 0));bound->push_back(pcl::PointXYZ(0.15, 0.1, 0));pcl::ConvexHull<pcl::PointXYZ> hull; //建立一个凸包对象hull.setInputCloud(bound); //输入设置好的凸包范围hull.setDimension(2); //设置凸包的维度std::vector<pcl::Vertices> polygons; //设置动态数组用于保存凸包顶点//设置点云用于描述凸包的形状pcl::PointCloud<pcl::PointXYZ>::Ptr surface_hull(new pcl::PointCloud<pcl::PointXYZ>); hull.reconstruct(*surface_hull, polygons); //计算凸包结果pcl::PointCloud<pcl::PointXYZ>::Ptr objects(new pcl::PointCloud<pcl::PointXYZ>);pcl::CropHull<pcl::PointXYZ> crop; //创建CropHull对象crop.setDim(2); //设置维度crop.setInputCloud(cloud); //设置输入点云crop.setHullIndices(polygons); //输入封闭多边形的顶点crop.setHullCloud(surface_hull); //输入封闭多边形的形状crop.filter(*objects); //执行CropHull滤波并存储相应的结果std::cout << "Cloud after crop has:" << objects->size() << " data points." << std::endl;//初始化共享指针用于进行可视化boost::shared_ptr<pcl::visualization::PCLVisualizer> view(new pcl::visualization::PCLVisualizer("crophull display"));view->setBackgroundColor(255, 255, 255);//利用多视口输出可视化结果int v1(0);view->createViewPort(0.0, 0.0, 0.33, 1, v1);view->setBackgroundColor(255, 255, 255, v1);view->addPointCloud(cloud, "cloud", v1);view->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_COLOR, 1, 0, 0, "cloud");view->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 3, "cloud");view->addPolygon<pcl::PointXYZ>(surface_hull, 0, .069 * 255, 0.2 * 255, "backview_hull_polyLine1", v1);int v2(0);view->createViewPort(0.33, 0.0, 0.66, 1, v2);view->setBackgroundColor(255, 255, 255, v2);view->addPointCloud(surface_hull, "surface_hull", v2);view->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_COLOR, 1, 0, 1, "surface_hull");view->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 8, "surface_hull");view->addPolygon<pcl::PointXYZ>(surface_hull, 0, .069 * 255, 0.2 * 255, "backview_hull_polyLine1", v2);int v3(0);view->createViewPort(0.66, 0.0, 1, 1, v3);view->setBackgroundColor(255, 255, 255, v3);view->addPointCloud(objects, "objects", v3);view->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_COLOR, 0, 1, 0, "objects");view->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 3, "objects");while (!view->wasStopped()){view->spinOnce(1000);}system("pause");return 0;
}
二、结果
PCL 任意多边形内部点云提取相关推荐
- 求任意多边形内部水平方向似最大矩形算法实现
背景说明 前段时间有个求点是否在多边形内部的需求,折腾了不少时间,现截取其中的的重点部分--求任意多边形内部水平方向似最大矩形--来搞篇博客. 求点是否在多边形内部这个算法很容易搞,一搜一大把,但数据 ...
- 一种求任意多边形内部水平方向似最大矩形的算法
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 在前一篇中,我们探讨了如何求凸多边形中的似最大圆,但是针对实际 ...
- PCL学习一:点云与PCL基础
参考引用 黑马机器人 | PCL-3D点云 PCL(Point Cloud Library)学习记录 PCL点云库学习笔记(文章链接汇总) 1. 点云概述 点云(Point Cloud)是三维空间中, ...
- PCL中的OpenNI点云获取框架(OpenNI Grabber Framework in PCL)
从PCL 1.0开始,PCL(三维点云处理库Point Cloud Library)提供了一个通用采集接口,这样可以方便地连接到不同的设备及其驱动.文件格式和其他数据源.PCL集成的第一个数据获取驱动 ...
- 判定点是否在不规则多边形内部的问题
2019独角兽企业重金招聘Python工程师标准>>> 问题如下: 话说在平面内有一个任意的不规则的封闭多边形,另外在这个平面内还有一个点,问题:如何高效的判定这个点是在这个多边形内 ...
- [转]如何判断一个点是否在一个多边形内部
原文地址:http://hi.baidu.com/wayright/item/ad18e4c0c5446b2dee4665c9 在多边性的存储中,每一个多边形都是由一系列连续的点组成,例如保存为数组P ...
- 【几何】计算任意多边形面积
给定一系列有序的线段(比如按顺序给定每个线段的左端点坐标),求这些线段围成的多边形的面积,公式为: 任意一个点与顺序相邻两点组成的三角形面积之和 分为凸多边形和凹多边形分别证明: 一.凸多 ...
- 判断一个坐标点是否在不规则多边形内部的算法
参考:https://wrf.ecse.rpi.edu//Research/Short_Notes/pnpoly.html 在GIS(地理信息管理系统)中,判断一个坐标是否在多边形内部是个经常要遇到的 ...
- 判断一个点是否在多边形内部
一.比如说,我就随便涂了一个多边形和一个点,现在我要给出一种通用的方法来判断这个点是不是在多边形内部(别告诉我用肉眼观察--). 首先想到的一个解法是从这个点做一条射线,计算它跟多边形边界的交点个数, ...
最新文章
- OpenCV 笔记(05)— opencv.hpp 头文件作用(是其它所有头文件的全集)
- laravel项目composer安装
- 使用镜像加速 Rtools 下载与安装
- 浮点转字符串性能比较
- 3.递归猴子吃桃问题
- ftrace使用说明(二)
- Charles安装与入门
- [转]唐骏谈职场 —— 管理者要学会让员工感动
- 线程安全的set_「Java」 - 多线程四 amp; ThreadLocal
- 中止执行后超过2年_10年后超过美国!汪涛:中国GDP将达到28万亿美元
- 网站的友情链接是什么?
- 基于qt的计算机论文,一种基于Qt的科学计算器系统 毕业论文.doc
- 特殊字符的处理 GS RS EOT
- Onenote无法登录报错显示0xE000078D解决方法
- hive项目之微博ETL项目总结分析
- 联想服务器SR650升级网卡固件微码
- 爱情刚刚开始是最美好的
- 手机玩exe游戏的模拟器_安卓游戏模拟器App | 手机玩红警手机玩暗黑破坏神手机玩魔兽手机玩星际手机玩……...
- NPOI设置Excel下拉选项
- Netty空闲检测之写空闲