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

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.dtcms.com/a/341022.html

相关文章:

  • Frida Hook Android Activity生命周期全方法监控方案
  • 哈希:字母异位词分组
  • RHCA07-Linux跟踪工具及CPU调优
  • Linux I/O 多路复用实战:深入剖析 Select 与 Poll
  • capsh 命令详解
  • 【机器学习深度学习】Ollama、vLLM、LMDeploy对比:选择适合你的 LLM 推理框架
  • Objective-C 版本的 LiveEventBus 效果
  • vue+openlayers示例:适配arcgis矢量瓦片服务以及样式(附源码下载)
  • 英伟达Blackwell架构下的中国特供版AI芯片:B30A与RTX 6000D,是技术妥协还是市场新策略?
  • 基于单片机太阳能充电器/太阳能转换电能
  • C端高并发项目都有哪些
  • Angular由一个bug说起之十八:伴随框架升级而升级ESLint遇到的问题与思考
  • C++围绕音视频相关的资料都有哪些?如何进行学习
  • 实现自己的AI视频监控系统-第一章-视频拉流与解码2
  • 【ansible】4.实施任务控制
  • 【沉浸式解决问题】peewee.ImproperlyConfigured: MySQL driver not installed!
  • 亚马逊运营破局:销量与ACOS的动态平衡之道
  • 网页作品惊艳亮相!这个浪浪山小妖怪网站太治愈了!
  • 8 月中 汇报下近半个月都在做些什么
  • VR交通安全学习机-VR交通普法体验馆方案
  • Vue3源码reactivity响应式篇之数组代理的方法
  • Android studio gradle 下载不下来
  • 23种设计模式——模板方法模式(Template Method Pattern)详解
  • 在 Ubuntu Linux LTS 上安装 SimpleScreenRecorder 以录制屏幕
  • 软考中级习题与解答——第一章_数据结构与算法基础(1)
  • 软考网工选择题节选-2
  • uniapp:h5链接拉起支付宝支付
  • uni-app跨端开发最后一公里:详解应用上架各大应用商店全流程
  • 从协同设计到绿色制造:工业云渲染的价值闭环
  • uniapp 手写签名组件开发全攻略