当前位置: 首页 > ds >正文

pcl求平面点云的边界凸包点

基本流程

1,读入点云,并去除无效点

2,拟合平面

3,去除离平面距离较远的点

4,对点云进行平面投影

5,进行convex_hull运算

初学者,暂时不知道能用来干嘛。练手还是非常不错的!

#define _CRT_SECURE_NO_WARNINGS
#include <pcl/point_cloud.h>
#include <pcl/point_types.h>
#include <pcl/io/ply_io.h>
#include <pcl/io/pcd_io.h>
#include <pcl/common/centroid.h>
#include "tolls.h"
#include <pcl/common/angles.h>
#include<pcl/common/eigen.h>
#include<pcl/common/common_headers.h>
#include<pcl/common/common.h>
#include<pcl/filters/random_sample.h>
#include<pcl/filters/uniform_sampling.h>
#include<Eigen/Dense>
#include<pcl/features/moment_of_inertia_estimation.h>
#include<pcl/common/transforms.h>
#include<pcl/features/normal_3d.h>
#include<pcl/visualization//pcl_visualizer.h>
#include<Eigen/Dense>
#include<pcl/filters/grid_minimum.h>
#include<pcl/segmentation/region_growing_rgb.h>
#include<pcl/segmentation/sac_segmentation.h>
#include<pcl/filters/model_outlier_removal.h>
#include<pcl/filters/project_inliers.h>
#include<pcl/surface/convex_hull.h>using namespace std;
int main() 
{pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);string filename = "D:\\Desktop\\pacl_learning\\cloud\\test1.pcd";pcl::io::loadPCDFile(filename, *cloud);cout << cloud->points.size() << endl;//show_cloud_xyz(cloud);//先去除无效点vector<int> a;pcl::removeNaNFromPointCloud(*cloud, *cloud,a );//拟合平面pcl::ModelCoefficients::Ptr coffe(new pcl::ModelCoefficients);pcl::SACSegmentation<pcl::PointXYZ> seg;seg.setInputCloud(cloud);seg.setModelType(pcl::SACMODEL_PLANE);seg.setMethodType(pcl::SAC_RMSAC);seg.setMaxIterations(100);pcl::PointIndices::Ptr index(new pcl::PointIndices);seg.segment(*index, *coffe);cout <<  coffe->values[0] <<"  " << coffe->values[1] << "  " << coffe->values[2] << "  " << coffe->values[3] << "  " << endl;//去除偏远的点pcl::ModelOutlierRemoval<pcl::PointXYZ> model_re;model_re.setInputCloud(cloud);model_re.setModelCoefficients(*coffe);model_re.setModelType(pcl::SACMODEL_PLANE);model_re.setThreshold(0.1);model_re.filter(a);cout << a.size() << endl;//提取目标点pcl::PointCloud<pcl::PointXYZ>::Ptr cloud1(new pcl::PointCloud<pcl::PointXYZ>);for (int i=0;i<a.size();i++){cloud1->push_back(cloud->points[a[i]]);}cout << cloud1->points.size() << endl;//开始对这些点进行投影 cloud1pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_proj(new pcl::PointCloud<pcl::PointXYZ>);pcl::ProjectInliers<pcl::PointXYZ> proj;proj.setInputCloud(cloud1);proj.setModelType(pcl::SACMODEL_PLANE);proj.setModelCoefficients(coffe);proj.filter(*cloud_proj);//show_cloud_xyz(cloud_proj);//开始计算凸包pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_hull(new pcl::PointCloud<pcl::PointXYZ>);pcl::ConvexHull<pcl::PointXYZ> con_hull;con_hull.setInputCloud(cloud_proj);con_hull.setDimension(2);  //点云平面投影后,这里必须用2维,三维会报错的con_hull.reconstruct(*cloud_hull);cout << cloud_hull->points.size() << endl;//show_cloud_xyz(cloud_hull); 自己封装 的算子return 0;}

http://www.xdnf.cn/news/18454.html

相关文章:

  • 池化技术分析
  • GISBox工具:FBX到3DTiles文件转换指南
  • Eclipse 里Mybatis的xml的头部报错
  • 仿真驱动的AI自动驾驶汽车安全设计与测试
  • JVM基础知识总结
  • 深入解析FTP核心术语03
  • PWA》》以京东为例安装到PC端
  • 从二进制固件到人类意识:AI小智开发全记录与技术沉思—— 一个创客的硬件实践与认知边界探索
  • 数据预处理
  • 怎么确定mongodb是不是链接上了?
  • 电脑驱动免费更新? 这款驱动管理工具:一键扫更新,还能备份恢复,小白也会用~
  • 嵌入式音频开发(3)- AudioService核心功能
  • uniapp开发微信小程序自定义导航栏
  • K距离间隔重排字符串 (LeetCode 358) — Swift解法 + 可运行Demo
  • 嵌入式开发学习———Linux环境下网络编程学习(四)
  • 计算机网络基础复习
  • 鸿蒙安卓前端中加载丢帧:ArkWeb分析
  • (5)软件包管理器 yum | Vim 编辑器 | Vim 文本批量化操作 | 配置 Vim
  • K8S-Pod资源对象
  • Electron开发的核心功能要点总结,旨在帮助快速掌握Electron开发核心逻辑
  • 用TestComplete打造高效CI/CD测试流程
  • 计算机网络技术-局域网配置(Day.4)
  • 车联网(V2X)中万物的重新定义---联网汽车新时代
  • 算法第五十二天:图论part03(第十一章)
  • 【图论】拓扑排序
  • 【考研408数据结构-09】 图论进阶:最短路径与最小生成树
  • 盲盒商城h5源码搭建可二开幸运盲盒回收转增定制开发教程
  • 整体设计 之定稿 “凝聚式中心点”原型 --整除:智能合约和DBMS的在表层挂接 能/所 依据的深层套接
  • YAML格式笔记
  • Linux-----《Linux系统管理速通:界面切换、远程连接、目录权限与用户管理一网打尽》