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(地理信息管理系统)中,判断一个坐标是否在多边形内部是个经常要遇到的 ...
- 判断一个点是否在多边形内部
一.比如说,我就随便涂了一个多边形和一个点,现在我要给出一种通用的方法来判断这个点是不是在多边形内部(别告诉我用肉眼观察--). 首先想到的一个解法是从这个点做一条射线,计算它跟多边形边界的交点个数, ...
最新文章
- 程序世界的秘密(上)
- ASP.NET MVC Model绑定小结
- c# winform程序调用托管dll(c#的dll),使用添加引用和动态加载dll
- 500位全球算法开发者零奖金参加阿里云天池大赛 AI预测台风助力防灾减灾
- Codeforces Round #409 (rated, Div. 2, based on VK Cup 2017 Round 2)C. Voltage Keepsake
- C# 中执行 msi 安装
- 数组作为方法的返回值
- Vue的基本环境搭建
- zabbix自定义用户key
- Allegro学习笔记:Allegro快速入门之一--查看BRD Layout
- 全国计算机等级考点申请,全国计算机等级考试(NCRE)考点申请书某高校(367)
- 批量安装windows系统补丁包
- android格式化外置u盘,Android5.x+ 格式化外部存储(u盘, sdcard)的方法
- torch.sqrt(lhs**2) 与torch.abs(lhs)在pytorch中的差异
- 2022年中职组“网络安全”赛项湖南省任务书
- vertica用户自定义扩展介绍
- Mac如何做才能彻底清理垃圾
- linux服务器的Gzip文件压缩方法
- 微积分 = 微分 + 积分
- 爬虫学习笔记(二)http请求详解