Open3d 四点生面:从底部两点和顶部两点组成的四点生mesh面片

3D点云目标检测小白学习路线(1) 目标检测任务三维目标检测算法物体分类和定位 三维目标检测算法 1.基于局部特征的目标识别 基于局部特征的物体识别方法主要是通过局部来识别整体。该方法无需对处理数据进行分割,往往通过提取物体的关键点、边缘或者面片等局部特征并进行比对来完成物体的识别。其中,特征提取是物体识别中非常关键的一步,它将直接影响到物体识别系统的性能。基于局部特征的方式对噪声和遮挡有更好的鲁棒性,同时不受颜色和纹理信息缺乏的限制。由于局部特征描述子仅使用参考点邻域信息,所以不对场景进行分割即可处理复杂场景。但是局部特征描述子维度较高,需 阅读详情

前言

从底部两点和顶部两点组成的四点生mesh面片;Open3d自带的mesh生成的api没有通过点直接生成的,要么就是box或者凸包


一、思路

三角面片就是结构化有索引的点,给四个点编号编号就可以了

二、使用步骤

1.引入库

代码如下(示例):

import numpy as np
import open3d as o3d

2.核心代码

代码如下(示例):

        # 创建立方体网格
        cube_mesh = o3d.geometry.TriangleMesh()
        cube_mesh.vertices = o3d.utility.Vector3dVector(bottom)
        cube_mesh.triangles = o3d.utility.Vector3iVector(cube_triangles)

3.完整代码

代码如下(示例):


import numpy as np
import open3d as o3d

'''
作者 : cscec;
日期 : 2024年1月27日;
功能 : 从底部两点和顶部两点组成的四点生mesh面片;
输入 : numpy格式四个点;
输出 : cube_mesh = 面片

'''
# 从底部两点和顶部两点组成的四边形生成mesh
def create_mesh_from_4_points(bottom_points_np):
        # 从点云中提取点的坐标
        # obox = point_cloud.get_oriented_bounding_box()
        bottom_points_np = np.array(bottom_points_np)
        # 根据 Z 值对点进行排序
        sorted_points = bottom_points_np[np.argsort(bottom_points_np[:, 2])]
        # 获取 Z 值最小的四个点
        points = sorted_points[:2]
        # 获取 Z 值最大的四个点
        points_max = sorted_points[2:]
        # 计算中心点坐标
        center = np.mean(points, axis=0)
        center_max = np.mean(points_max, axis=0)
        # 计算每个点相对于中心点的极坐标角度
        angles = np.arctan2(points[:, 1] - center[1], points[:, 0] - center[0])
        angles_max = np.arctan2(points_max[:, 1] - center_max[1], points_max[:, 0] - center_max[0])
        # 对角度进行排序
        sorted_indices = np.argsort(angles)
        sorted_indices_max = np.argsort(angles_max)
        points = points[sorted_indices]
        points_max = points_max[sorted_indices_max]
        # 按排序后的顺序连接点
        bottom = np.empty([4, 3], dtype=float)
        bottom[0] = points[0]
        bottom[1] = points[1]
        bottom[2] = points_max[1]
        bottom[3] = points_max[0]

        # 获取立方体面的索引
        cube_triangles = [
            [0, 1, 2], [2, 3, 0],
            [2, 1, 0], [0, 3, 2]
        ]

        # 创建立方体网格
        cube_mesh = o3d.geometry.TriangleMesh()

        cube_mesh.vertices = o3d.utility.Vector3dVector(bottom)
        cube_mesh.triangles = o3d.utility.Vector3iVector(cube_triangles)

        cube_mesh.paint_uniform_color([1, 0, 0])
        # lineset = create_lines_from_points(cube_points_np)
        return cube_mesh


if __name__ == "__main__":
    # 【加载点云】
    array = np.array([[0,0,0],[0,0,1000],[1000,0,0],[1000,0,1000]])
    obx2 = create_mesh_from_4_points(array)
    o3d.visualization.draw_geometries([obx2.paint_uniform_color([1, 0, 0])],
                                      window_name='Open3D', width=1920, height=1080, left=50, top=50,
                                      point_show_normal=True, mesh_show_wireframe=True, mesh_show_back_face=True)

该处使用np.array([[0,0,0],[0,0,1000],[1000,0,0],[1000,0,1000]])初始化点云


测试效果

在这里插入图片描述

总结

例如:以上就是今天要讲的内容,本文仅仅简单介绍了从底部两点和顶部两点组成的四点生mesh面片的使用,而open3d提供了大量能使我们快速便捷地处理面片数据的函数和方法,详情查看专栏其他文章。

mesh(三角面片)数据解析 mesh(三角面片)简介 Mesh是多边形网格,是计算机图形学中用于各种不规律物体建模的一种数据结构。在多边形网格的面片中三角面片是被分割的最小单位,且表示比较简单、灵活并且拓扑描述方便,所以被广泛使用,所以mesh常常指代三角面片。 mesh的一般组成: mesh表示的组成部分:顶点,边,面。 mesh文件: mesh文件是.obj(一种通用的三维模型的后缀) 和 .stl格式(一种标准的存储三角面片的格式) mesh的另一种格式是pcl。但pcl除了能存储三角面片外还能存储四边形的面片等多种形状。 ( 阅读详情

相关推荐

Open3d之网格(Mesh)操作

网格 open3d有一种被称为TriangleMesh的3D三角网格的数据结构。下面的代码展示了如何从一个ply文件读取三角网格数据并打印它的顶点和三角形。 # -*-coding:utf-8 -*- import copy import numpy as np import open3d as o3d # 加载三角网格 mesh = o3d.io.read_triangle_mesh("/home/ancy/PycharmProjects/learn/Open3D/examples/test_da

ancy的博客 2万+

open3d 构建mesh

方法一 使用顶点坐标以及三角形索引。这有点像OpenGL了。 # 输入是顶点以及每个三角形的索引 def get_non_manifold_vertex_mesh(verts, triangles): # verts = np.array( # [ # [-1, 0, -1], # [1, 0, -1], # [0, 1, -1], # [0, 0, 0], # .

m0_38139098的博客 2541

Open3d 二 点云转mesh并实现空洞修复、mesh简化、mesh细化

点云是由大量的点组成的三维数据集,而mesh是由三角形组成的三维模型。点云转换为mesh的过程称为曲面重建。曲面重建的目的是从点云数据中提取出表面的形状信息。曲面重建的方法有很多种,其中一种常用的方法是贪心投影三角化法。该方法的大致流程如下:将点云通过法线投影到某一二维坐标平面内,对投影得到的点云做平面内的三角化,从而得到各点的拓扑连接关系。最后根据平面内投影点的拓扑连接关系确定各原始三维点间的拓扑连接,所得三角网格即为重建得到的曲面模型(mesh)。

m0_74259636的博客 1万+

自动驾驶中车辆如何使用点云定位?

激光雷达传感器能够获取丰富,稠密且精确的三维空间中物体的点云数据,这可以帮助自动驾驶车辆实现定位和障碍物的跟踪,lidar也将成为实现完全自动驾驶的核心传感器。本篇文章将主要介绍三维激光雷达在自动驾驶定位领域最新的研究,并分析各种方法的定位的效果。介绍自动驾驶的定位意味着能够在地图中找到车辆的位置和方向。这里的地图也是只使用激光雷达获取的,使用激光束获取测量的距离并产生点云数据,其中的每个点表示传感器获取的物体表面的(XYZ)的坐标。基于点云的高精地图是可以通过lidar扫描离线的构建出来,也可以在导航过程

mahui85的专栏 4877

Open3D:Win10 + VS2017配置Open3D(C++、python)

一、下载源码 地址:https://github.com/intel-isl/Open3D 1.1 克隆源码【笔者的源码路径为D:\Open3D\Open3D】 1.2 切换版本【笔者的版本为0.8.0】 1.3 更新子模块【用于获取第三方库!很重要!】 二、CMake编译 2.1 设置路径 【source code: D:\Open3D\Open3D;build binaries: D:\Open3D】 【笔者设置CMAKE/CMAKE_INSTALL_PREFIX的路径为D:/Open.

累了就要打游戏 1万+

Open3D Mesh操作全攻略:从基础处理到高级过滤技巧

本文全面介绍Open3D库在Mesh数据处理中的应用,从基础操作如加载、可视化到高级技巧包括过滤、采样与重建。通过详细代码示例和实用技巧,帮助三维建模工程师高效处理复杂Mesh数据,提升工作流程效率。

weixin_29230649的博客 567

Open3D将点云数据转换为Mesh(面元)格式数据

【代码】Open3D将点云数据转换为Mesh格式数据。

easyboot的专栏 1717

【open3d】mesh处理1:基本结构 | 可视化 | 法线 | 裁剪 | 上色 | 多种滤波 | 基本属性

其中一个重要属性是流形属性,我们可以测试三角形网格是否为边缘流形 is_edge_manifold,是否为顶点流形 is_vertex_manifold。如果网格中存在与另一个网格相交的三角形,函数 is_self_intersecting 返回 True。函数 filter_smooth_simple 中的参数 number_of_iterations 定义了滤波器应用于网格的频率。原因是当前网格没有顶点或面的法线。非网格边缘显示为红色,边界边缘显示为绿色,非网格顶点显示为绿色点,自交三角形显示为粉色。

weixin_47319058的博客 4038

Open3D Mesh 网格

Open3D-Mesh 网格

一只大鸽子的博客 3328

open3D体素化

Open3d中从三角网构建体素:Open3D 提供了从三角形网格创建体素网格的方法create_from_triangle_mesh。voxel_size为体素的尺寸大小,体素的尺寸越大,下采样的倍数越大,点云也就越稀疏。将物体的几何形式表示转换成最接近该物体的体素表示形式,产生体数据,包含模型的表面信息和内部属性。表示3D模型的体素跟表示2D图像的像素相似,只不过从二维的点扩展到三维的立方体单元。输入的每个体素都VoxelGrid被视为 3D 空间中的 一个点,其坐标对应于体素的原点。

qq_52040083的博客 1581

Open3D Mesh读写可视化【2025最新版】

mesh读写保存可视化计算法线等。博客长期更新,本文最近更新时间为:2025年11月6日。

点云侠的博客 40万+

如何使用open3d合并多组mesh并输出结果

关注公众号,发现CV技术之美最近在学习open3d的相关应用,然后遇到了一个很有趣的问题。给定多个mesh,我们可能会需要把他们全部合并到一个文件并使用。但是这并不好实现,因为open3d自己不支持这样的操作。相比之下,其他一些集成度非常高的软件,是可以实现这样的操作的,例如meshlab通过交互栏中的“flatten visible layer”指令来实现。唯一的缺点是,你每次都需要手动操作才行...

我爱计算机视觉 2569

『OPEN3D』1.2 mesh处理 python篇

介绍open3d对mesh的基本处理操作

NNNNNathan的博客 4648

OPEN3D学习笔记(二)——Mesh & Transformation

OPEN3D学习笔记(二)Mesh可视化Mesh表面法线估计裁剪Mesh上颜色Mesh网格属性 Mesh Open3D具有3D三角形网格的数据结构,称为TriangleMesh。下面的代码显示了如何从层中读取三角形网格并打印其顶点和三角形。 print("Testing mesh in open3d ...") mesh = o3dtut.get_knot_mesh() print(mesh) print('Vertices:') print(np.asarray(mesh.vertices)) # 每个

岛民浩哥的博客 4768

详解三角面片:实现现实场景的数字化

详解三角面片:实现现实场景的数字化,含python示例程序。

叶子的博客 5859

threejs加载3dtiles(倾斜摄影)数据

1、安装3dTilesRenderer 插件 使用npm 安装 npm install 3d-tiles-renderer --save 或者去官网下载都行 GitHub - NASA-AMMOS/3DTilesRendererJS: Renderer for 3D Tiles in Javascript using three.js 2、使用 首先引入,在填入3dtiles数据的地址,可以是文件路径也可以是网站路径 const tilesRenderer = new TilesRend..

weixin_39481659的博客 1万+

Open3D 点云三角面化 mesh

open3d 点云三角面化 import open3d as o3d import numpy as np import trimesh pcd = o3d.io.read_point_cloud("D:/program/PCL_1_9_1/share/doc/pcl-1.9/tutorials/sources/alignment_prerejective/chef.pcd") pcd.estimate_normals() # estimate radius for rolling ball dista

weixin_42783619的博客 1万+

多目标优化NSGA-II(快速精英非支配排序遗传算法)及python实现

文章目录前言一、什么是NSGA-II?二、学习NSGA-II1.快速非支配排序算法2.密度估计3.拥挤比较算子4.主循环5.代码6.总结 前言 NSGA-II适用于复杂的多目标优化问题,是K-Deb教授在2000年在一篇paper《MOEAs — A fast and elitist multi-objective genetic algorithm: nsga2》提出。 Keywords: optimization; multi-objective evolutionary algorithm; no

ricky_blog 9745

open3d-mesh读写

三角网格数据python读写

Bolly_He的博客 2655

VXLAN技术详解

VXLAN(虚拟可扩展局域网)是一种Overlay二层虚拟化技术,通过MAC-in-UDP封装在IP网络上构建大规模虚拟二层网络。核心组件包括VTEP(隧道端点)、24位VNI(支持1600万个虚拟网络)和VXLAN网关。相比VLAN,VXLAN具有超大规模扩展、跨三层互联、支持虚拟机无缝迁移等优势,适用于云数据中心多租户隔离、跨数据中心互联等场景。其基于IP路由的封装方式无需改造物理网络,为现代云网络提供了弹性、安全的虚拟化解决方案。

kjkdd的博客 595

UE游戏引擎材质简单入门

什么是物体的材质,材质属性定义了物体的某些特性,从而决定了物体表面是如何与光线相作用的。UE中物理基础渲染(Physically Based Rendering OR PBR)几乎可以让我们模拟显示世界中的任何材质。那么如何在UE中制作出真实的PBR材质,基于我们提供的游戏引擎插件,如何将这些材质资源导出,并应用到 SuperMap iClient3D for Cesium/WebGL 平台上,提升模型的显示效果呢,下面小编将详细讲解一下。

m0_71055362的博客 2511

Open3d:从mesh中采样点云的两个函数

功能描述该方法通过从网格表面生成点云,不考虑点间距约束。参数说明参数类型默认值描述int100要采样的点数boolFalse是否使用三角形面法线而非插值顶点法线算法流程计算每个三角形的面积计算总面积和每个三角形的采样权重按面积比例分配采样点到各三角形对每个三角形:其中(随机生成)同泊松圆盘采样特点与注意:计算复杂度低:大三角形获得更多采样点:点可能聚集在小三角形区域:每次采样结果不同:实际点数可能略有偏差(四舍五入导致)适用场景快速网格简化实时应用机器学习数据准备。

qq_46781387的博客 1107

Python大数据舆情分析系统开发实战

舆情监测系统是大数据分析的重要应用场景,通过自然语言处理(NLP)技术解析社交媒体文本情感倾向。基于Python技术栈的解决方案整合了Scrapy爬虫框架进行数据采集,PySpark处理海量文本数据,结合SnowNLP和Jieba实现中文语义分析。系统采用微服务架构设计,包含数据采集层、处理层、存储层和应用层,通过情感分析优化和实时热点检测算法提升监测准确率。典型应用包括企业品牌监测、公共事件预警等场景,开发过程中需特别注意数据合规性和分布式集群的性能调优。

weixin_34408624的博客 388
上一篇: 【计算几何】一、编程表示基本元素-01-点和点云(C、C++、python)
下一篇: Open3d 获取并排序点云包围盒的八个numpy角点,从下四角开始到上四角;
红烧几何
博客等级 码龄6年 176粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值