点云三角化---------PCL

贪婪三角化

pcl::PolygonMesh PclTool::projectionTriangulation(pcl::PointCloud<pcl::PointXYZ>::Ptr cloud)
{
    // 正态估计
    pcl::NormalEstimation<pcl::PointXYZ, pcl::Normal> n;                                   // 法线估计对象
    pcl::PointCloud<pcl::Normal>::Ptr normals(new pcl::PointCloud<pcl::Normal>);           // 存储估计的法线
    pcl::search::KdTree<pcl::PointXYZ>::Ptr tree(new pcl::search::KdTree<pcl::PointXYZ>);  // 定义kd树指针
    tree->setInputCloud(cloud);                                                            // 用cloud构建tree对象
    n.setInputCloud(cloud);
    n.setSearchMethod(tree);
    n.setKSearch(20);
    n.compute(*normals);  // 估计法线存储到其中

    // 法线不应包含点法线+曲面曲率

      // //连接XYZ字段和法线字段*
    pcl::PointCloud<pcl::PointNormal>::Ptr cloud_with_normals(new pcl::PointCloud<pcl::PointNormal>);
    pcl::concatenateFields(*cloud, *normals, *cloud_with_normals);  // 连接字段
    //* cloud_with_normals = cloud + normals

    // 定义搜索树对象
    pcl::search::KdTree<pcl::PointNormal>::Ptr tree2(new pcl::search::KdTree<pcl::PointNormal>);
    tree2->setInputCloud(cloud_with_normals);  // 点云构建搜索树

      // 初始化对象
    pcl::GreedyProjectionTriangulation<pcl::PointNormal> gp3;  // 定义三角化对象
    pcl::PolygonMesh triangles;                                // 存储最终三角化的网络模型

    // 设置连接点之间的最大距离(最大边长)
    gp3.setSearchRadius(0.025);  // 设置连接点之间的最大距离,(即是三角形最大边长)

      // 设置各参数值
    gp3.setMu(2.5);                        // 设置被样本点搜索其近邻点的最远距离为2.5,为了使用点云密度的变化
    gp3.setMaximumNearestNeighbors(100);   // 设置样本点可搜索的邻域个数
    gp3.setMaximumSurfaceAngle(M_PI / 4);  // 设置某点法线方向偏离样本点法线的最大角度45
    gp3.setMinimumAngle(M_PI / 18);        // 设置三角化后得到的三角形内角的最小的角度为10
    gp3.setMaximumAngle(2 * M_PI / 3);     // 设置三角化后得到的三角形内角的最大角度为120
    gp3.setNormalConsistency(false);       // 设置该参数保证法线朝向一致

    // Get result
    gp3.setInputCloud(cloud_with_normals);  // 设置输入点云为有向点云
    gp3.setSearchMethod(tree2);             // 设置搜索方式
    gp3.reconstruct(triangles);             // 重建提取三角化

    // 附加顶点信息
    std::vector<int> parts = gp3.getPartIDs();
    std::vector<int> states = gp3.getPointStates();

    return triangles;
}

//可视化
bool PclTool::viewerPcl(pcl::PolygonMesh& triangles)
{
    // 初始化PCL可视化对象
    pcl::visualization::PCLVisualizer viewer("3D Viewer");

    // 设置背景颜色
    viewer.setBackgroundColor(0, 0, 0);

    // 添加三角化后的网格模型
    viewer.addPolygonMesh(triangles, "triangles");

    // 设置相机位置和方向
    viewer.setCameraPosition(0, 0, 0, 0, 0, 1, 0, -1, 0);

    // 启动可视化
    while (!viewer.wasStopped())
    {
        viewer.spinOnce(100);
        std::this_thread::sleep_for(std::chrono::milliseconds(100));
    }
    std::cout << "End show " << std::endl;
    return true;
}

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/589934.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

刷代码随想录有感(53):合并二叉树

题干&#xff1a; 代码&#xff08;递归实现&#xff09;&#xff1a; TreeNode* mergeTrees(TreeNode* root1, TreeNode* root2) {//前序好理解&#xff0c;直接将树覆盖到另一个上面if(root1 NULL)return root2;//当前遍历节点为空的话就让另一个的值覆盖过来if(root2 NUL…

k8s环境部署gpu以及CUDA兼容性分析

本文记录和学习在实用gpu搭建k8s支持上层应用时的功能实践和遇到的问题。 1. 基础概念 CUDA本质上就是NVIDIA专为通用高性能并行计算设计的一套计算平台和编程模型&#xff0c;换句话使用GPU并行编程的规范方法&#xff0c;所以CUDA在软件层面包含了众多库&#xff0c; 那这里…

【Vulhub靶场】Nginx 漏洞复现

Nginx 漏洞复现 一、Nginx 文件名逻辑漏洞&#xff08;CVE-2013-4547&#xff09;1、影响版本2、漏洞原理3、漏洞复现 二、Nginx 解析漏洞1、版本信息&#xff1a;2、漏洞详情3、漏洞复现 一、Nginx 文件名逻辑漏洞&#xff08;CVE-2013-4547&#xff09; 1、影响版本 Nginx …

python中的self是什么

你对Python编程中的self真的了解吗? 当我们在Python编程的时候,尤其是写一个方法的时候,会自动补齐括号中的self,那么我们对它真的了解吗? Self 是什么?有什么作用? self指的是调用该函数的对象&#xff08;是一个实例&#xff09;,首先明确的是self只有在类中的方法中才…

基于SpringBoot+Vue的旅游网站系统

初衷 在后台收到很多私信是咨询毕业设计怎么做的&#xff1f;有没有好的毕业设计参考?能感觉到现在的毕业生和当时的我有着同样的问题&#xff0c;但是当时的我没有被骗&#xff0c;因为现在很多人是被骗的&#xff0c;还没有出学校还是社会经验少&#xff0c;容易相信别人。…

使用Android Studio 搭建AOSP FrameWork 源码阅读开发环境

文章目录 概述安装Android Studio编译源码使用Android Studio打开源码制作ipr文件直接编译成功后自动打开Android Studio 修改SystemUI验证开发环境 概述 我们都知道Android的系统源码量非常之大&#xff0c;大致有frameworka层源码&#xff0c;硬件层(HAL)源码&#xff0c;内…

JSP语法——[JSP]5

希望你开心&#xff0c;希望你健康&#xff0c;希望你幸福&#xff0c;希望你点赞&#xff01; 最后的最后&#xff0c;关注喵&#xff0c;关注喵&#xff0c;关注喵&#xff0c;大大会看到更多有趣的博客哦&#xff01;&#xff01;&#xff01; 喵喵喵&#xff0c;你对我真的…

ue引擎游戏开发笔记(26)——处理角色死亡敌人仍攻击bug

1.需求分析 对游戏中存在的各种小问题做细节处理&#xff0c;例如玩家在死亡后&#xff0c;敌人仍对着目标开炮&#xff0c;并且仍然触发爆炸效果。 2.操作实现 1.首先分析问题起因&#xff0c;是由于虽然玩家控制的小车被摧毁了&#xff0c;但控制器仍然存在&#xff0c;没有…

[力扣]——125.验证回文串

class Solution {public static boolean isValidChar(char ch){if((ch > a && ch < z) ||(ch > 0 && ch < 9)){return true;}return false;}public boolean isPalindrome(String s) {// 将大小写统一起来s s.toLowerCase();int left 0, right s…

【介绍下Apache的安装与目录结构】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

全栈开发之路——前端篇(3)setup和响应式数据

全栈开发一条龙——前端篇 第一篇&#xff1a;框架确定、ide设置与项目创建 第二篇&#xff1a;介绍项目文件意义、组件结构与导入以及setup的引入。 本文为该系列的第三篇&#xff0c;主要讲述Vue核心的setup语法&#xff0c;同时讲解再使用了setup后如何设置响应式数据。 辅助…

flowable 奇遇

Flowable框架 碰到的问题1. 查询流程执行情况展示2. 查询流程审批人 碰到的问题 1. 查询流程执行情况展示 List<HistoricActivityInstance> list historyService.createHistoricActivityInstanceQuery().processInstanceId(processInstanceId()).orderByHistoricActivit…

信息管理与信息系统就业方向及前景分析

信息管理与信息系统(IMIS)专业的就业方向十分广泛&#xff0c;包含计算机方向、企业信息化管理、数据处理和数据分析等&#xff0c;随着大数据、云计算、人工智能、物联网等技术的兴起&#xff0c;对能够处理复杂信息系统的专业人才需求激增&#xff0c;信息管理与信息系统就业…

【Web】CTFSHOW 新手杯 题解

目录 easy_eval 剪刀石头布 baby_pickle repairman easy_eval 用script标签来绕过 剪刀石头布 需要赢100轮&#x1f914; 右键查看源码拿到提示 一眼session反序列化 打PHP_SESSION_UPLOAD_PROGRESS 脚本 import requestsp1 a|O:4:"Game":1:{s:3:"log…

STM32——点亮第一个LED灯

代码示例&#xff1a; #include "stm32f10x.h" // Device headerint main() {RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//开启时钟GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode GPIO_Mode_Out_PP;GPIO_InitSt…

AWS 机器学习课程--1.机器学习的介绍

课程链接&#xff1a;机器学习&#xff08;ML&#xff09;和人工智能&#xff08;AI&#xff09;— AWS 数字和课堂培训 免费课程&#xff0c;注册结束之后&#xff0c;就可以选择课程了。 共计6个课程&#xff0c;推荐学习时长为8小时13分钟 本章建议学习时间为30min&#…

C++奇迹之旅:C++内存管理的机制(进阶篇)

文章目录 &#x1f4dd;new和delete操作自定义类型&#x1f320; operator new与operator delete函数&#x1f309;operator new与operator delete函数 &#x1f320;new和delete的实现原理&#x1f309;内置类型&#x1f309;自定义类型 &#x1f320;定位new表达式(placement…

Flutter笔记:使用Flutter私有类涉及的授权协议问题

Flutter笔记 使用Flutter私有类涉及的授权协议问题 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.cs…

202012青少年软件编程(Python)等级考试试卷(一级)

第 1 题 【单选题】 运行下方代码段&#xff0c;输出是6&#xff0c;则输入的可能是&#xff08; &#xff09;。 a eval(input())print(a)A :8%2 B :8/2 C :3*2 D :3**2 正确答案:C 试题解析: 第 2 题 【单选题】 关于Python变量&#xff0c;下列叙述正确的是&#x…

中仕公考:北京额度管理(社会化/员额制)教师和在编教师的区别

一、什么是额度管理(社会化/员额制)教师? 社会化、员额制教师、额度管理教师&#xff0c;是为了解决中小学教师总量或编制不足&#xff0c;在现有编制基础上另外核定一定数额由地方政府保障&#xff0c;不纳入编制管理&#xff0c;另外实行专项管理。不办理入编手续&#xff…