PCL点云处理之求法向量

news2024/10/12 21:52:30

求法向量干什么?将点渲染成面

1、一个点垂直于一个曲线的切线叫法线

2、在点云中取一块区域,用最小二乘将区域中的点云拟合成一个面(贴合在曲面上的一个切面)在相近的区域计算出n个这样的面,用这个面求出法向量(每个法线对应着一个面),假如实际是一个相对平滑的表面,则向量的方向相近,可以直接cover成一个面;如果表面有很大的造型,则向量方向差异很大,则划分出相近的向量cover成不同面。

3、总结:用法线表达一个未知面的特征。

#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
// 包含相关头文件
#include <pcl/features/normal_3d.h>
#include <pcl/visualization/pcl_visualizer.h>

typedef pcl::PointXYZ PointT;
typedef pcl::PointNormal PointNT; // 也可以pcl::Normal,但无法用PCLVisualizer显示。

int main(int argc, char** argv)
{
	// 读取点云
	pcl::PointCloud<PointT>::Ptr cloud(new pcl::PointCloud<PointT>);
	pcl::io::loadPCDFile("../new.pcd", *cloud);
	
	// 计算法向量
	pcl::NormalEstimation<PointT, PointNT> nest;
	//nest.setRadiusSearch(0.01); // 设置拟合时邻域搜索半径,最好用模型分辨率的倍数
	nest.setKSearch(50); // 设置拟合时采用的点数
	nest.setInputCloud(cloud);
	pcl::PointCloud<PointNT>::Ptr normals(new pcl::PointCloud<PointNT>);
	nest.compute(*normals);

	for (size_t i = 0; i < cloud->points.size(); ++i)
	{	// 生成时只生成了法向量,没有将原始点云信息拷贝,为了显示需要复制原信息
		// 也可用其他方法进行连接,如:pcl::concatenateFields
		normals->points[i].x = cloud->points[i].x;
		normals->points[i].y = cloud->points[i].y;
		normals->points[i].z = cloud->points[i].z;
	}

	// 显示
	pcl::visualization::PCLVisualizer viewer;
	viewer.addPointCloud(cloud, "cloud");
	int level = 100; // 多少条法向量集合显示成一条
	float scale = 2.01; // 法向量长度
	viewer.addPointCloudNormals<PointNT>(normals, level, scale, "normals");

	viewer.spin();

	system("pause");
	return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LibreOffice SDK是LibreOffice软件的开发工具包

LibreOffice SDK是LibreOffice软件的开发工具包&#xff0c;它提供了一系列工具和库&#xff0c;使得开发者可以基于LibreOffice进行扩展或开发新的应用程序。以下是对LibreOffice SDK的详细介绍&#xff1a; 一、下载与安装 下载地址&#xff1a; 可以在LibreOffice的官方网站…

警惕!.rmallox勒索病毒:加密你的文件,勒索你的钱包

导言 在数字化时代&#xff0c;网络安全威胁层出不穷&#xff0c;其中勒索病毒已成为企业和个人用户面临的一大挑战。特别是.rmallox勒索病毒&#xff0c;以其复杂的加密算法和广泛的传播方式&#xff0c;给数据安全带来了严重威胁。本文91数据恢复将详细介绍.rmallox勒索病毒…

SCSI-8.UFS_RPMB

SCSI-8.UFS_RPMB RPMB 介绍 **RPMB&#xff08;Replay Protected Memory Block&#xff09;**是一种基于硬件的安全存储区域&#xff0c;其结构设计旨在确保数据的机密性、完整性以及防重放攻击的能力。RPMB通常嵌入在eMMC、UFS等存储设备中&#xff0c;由专用硬件电路管理和…

TCN-Transformer时间序列预测(多输入单预测)——基于Pytorch框架

1 数据集介绍 我们使用的数据集包含以下几个重要的属性&#xff1a; date&#xff08;日期&#xff09; open&#xff08;开盘价&#xff09; high&#xff08;最高价&#xff09; low&#xff08;最低价&#xff09; close&#xff08;收盘价&#xff09; pre_close&…

搜索如何加速你迈向 “AI 优先” 的步伐

作者&#xff1a;来自 Elastic Hayley Sutherland 人工智能与搜索的结合使企业智能达到了新的水平&#xff0c;自然语言处理 (NLP)、基于机器学习 (ML) 的相关性、向量/语义搜索和大型语言模型 (LLMs) 等技术帮助组织最终释放未分析数据的价值。组织需要搜索和知识发现技术来发…

uniapp 整合 OpenLayer3 - 全图、切换底图、导航、定位

一、全图 主要代码&#xff1a; // 获取当前可见视图范围 //console.log(this.map.getView().calculateExtent()); // 设置中心点 //this.map.getView().setCenter(transform([125.33,43.90], EPSG:4326, EPSG:3857)); // 设置层级 //this.map.getView().setZoom(10);// 中心…

【ProtoBuf】ProtoBuf基础与安装

本篇文章介绍 C 使用方向 文章目录 ProtoBuf简介ProtoBuf安装WindowsLinux ProtoBuf简介 ProtoBuf(全称为 Protocol Buffer)是一种序列化结构数据的方法 序列化是将对象转换为可存储的或传输的格式的过程&#xff0c;通常用于数据交换或持久化存储。我们在C/Java中编写的类不…

JAVA-数据结构-排序

1.直接插入排序 1.原理&#xff1a;和玩扑克牌一样&#xff0c;从左边第二个牌开始&#xff0c;选中这个&#xff0c;和前面的所有牌比较&#xff0c;插在合适的位置 public static void insertsort(int[] arr){//直接插入排序for (int i 1; i < arr.length; i) {//此循环…

SSD融合FERPlus模型实现面部情绪识别

关于深度实战社区 我们是一个深度学习领域的独立工作室。团队成员有&#xff1a;中科大硕士、纽约大学硕士、浙江大学硕士、华东理工博士等&#xff0c;曾在腾讯、百度、德勤等担任算法工程师/产品经理。全网20多万粉丝&#xff0c;拥有2篇国家级人工智能发明专利。 社区特色…

帝国竞争主义算法(ICA)的MATLAB代码复现

目录 1 帝国竞争主义算法优化BP神经网络代码复现 2 帝国竞争主义算法优化支持向量机代码复现 3 帝国竞争主义算法优化长短期记忆神经网络代码复现 1 帝国竞争主义算法优化BP神经网络代码复现 1&#xff09;单输出回归预测&#xff1a;单输出回归预测&#xff1a;帝国主义竞…

API接口并发请求控制实现

文章目录 一、问题概述二、解决思路1. AtomicInteger2. LongAdder3. Semaphore4. 实现区别三、API接口并发控制1. 核心源码2. 源码放送 一、问题概述 某API接口&#xff0c;承载某重要业务&#xff0c;希望控制任意时间点的并发访问数在5以内&#xff0c;该如何实现&#xff1…

数据结构-5.5.二叉树的存储结构

一.二叉树的顺序存储&#xff1a; a.完全二叉树&#xff1a; 1.顺序存储中利用了静态数组&#xff0c;空间大小有限&#xff1a; 2.基本操作&#xff1a; (i是结点编号) 1.上述图片中i所在的层次后面的公式应该把n换成i(图片里写错了)&#xff1b; 2.上述图片判断i是否有左…

ThingsBoard规则链节点:JSON Path节点详解

引言 JSON Path节点简介 用法 含义 应用场景 实际项目运用示例 智能农业监控系统 工业自动化生产线 车联网平台 结论 引言 ThingsBoard是一个功能强大的物联网平台&#xff0c;它提供了设备管理、数据收集与处理以及实时监控等核心功能。其规则引擎允许用户通过创建复…

Java-学生管理系统[初阶]

这次我们来尝试使用Java实现一下"学生管理系统"&#xff0c;顾名思义&#xff0c;就是实现一个能用来管理学生各种数据的系统。在后续学习中我们将对"学生管理系统"进行两种实现&#xff1a; &#x1f4da; 学生管理系统[初阶](不带模拟登录系统) &#…

衡石分析平台系统管理手册-智能运维之系统日志

系统日志​ 点击系统设置->系统日志 在这个页面&#xff0c;从时间&#xff0c;操作者, IP&#xff0c;行为&#xff0c;结果&#xff0c;类别&#xff0c;对象&#xff0c;描述等方面记录了用户行为&#xff0c;系统管理员可以从此页面针对整个系统的用户行为进行审计工作…

【C++】set/map 与 multiset/multimap

✨✨欢迎大家来到Celia的博客✨✨ &#x1f389;&#x1f389;创作不易&#xff0c;请点赞关注&#xff0c;多多支持哦&#x1f389;&#x1f389; 所属专栏&#xff1a;C 个人主页&#xff1a;Celias blog~ 目录 ​编辑 序列式容器和关联式容器 一、set 1.1 set介绍 1.2 …

大健康零售电商的智囊团:知识中台的应用与影响

在数字化浪潮席卷各行各业的今天&#xff0c;大健康零售电商行业也在积极探索转型升级的新路径。知识中台&#xff0c;作为一种集知识管理、数据挖掘与智能化应用于一体的新型技术架构&#xff0c;正逐渐成为推动这一转型的关键力量。本文将深入探讨知识中台在大健康零售电商中…

Light灯光组件+组件的相关操作+游戏资源的加载

Light灯光组件 Type: Directional:平行光&#xff0c;模仿的是太阳光 Spot:聚光灯 Area:区域光 Color&#xff1a; 颜色值 Mode: RealTime:实时 Mix:混合 Baked:烘焙 Intersity: 光照强度 Indirect Multiplier:光照强度乘数 Shadow Type:影子设置&#xff1a;…

CV方法再学习

轻量化模型 Mobile系列(V1~V3) MobileNetV1 MobileNetV1之所以轻量&#xff0c;与深度可分离卷积的关系密不可分 深度可分离卷积 主要是两种卷积变体组合使用&#xff0c;分别为逐通道卷积&#xff08;Depthwise Convolution&#xff09;和逐点卷积&#xff08;Pointwise C…

Nginx UI 一个可以管理Nginx的图形化界面工具

Nginx UI 是一个基于 Web 的图形界面管理工具&#xff0c;支持对 Nginx 的各项配置和状态进行直观的操作和监控。 Nginx UI 的功能非常丰富&#xff1a; 在线查看服务器 CPU、内存、系统负载、磁盘使用率等指标 在线 ChatGPT 助理 一键申请和自动续签 Let’s encrypt 证书 在…