open3d 裁剪点云

news2024/10/6 1:42:11

目录

1. crop_point_cloud

2. crop

3. crop_mesh


1. crop_point_cloud

关键函数

chair = vol.crop_point_cloud(pcd)   # vol: SelectionPolygonVolume
import open3d as o3d

if __name__ == "__main__":
    # 1. read pcd
    print("Load a ply point cloud, crop it, and render it")
    sample_ply_data = o3d.data.DemoCropPointCloud()
    pcd = o3d.io.read_point_cloud(sample_ply_data.point_cloud_path)

    # 2. crop
    # vol: SelectionPolygonVolume, 定义裁剪区域
    vol = o3d.visualization.read_selection_polygon_volume(sample_ply_data.cropped_json_path) 
    chair = vol.crop_point_cloud(pcd)

    # 2. view
    # Flip the pointclouds, otherwise they will be upside down.
    pcd.transform([[1, 0, 0, 0], [0, -1, 0, 0], [0, 0, -1, 0], [0, 0, 0, 1]])
    chair.transform([[1, 0, 0, 0], [0, -1, 0, 0], [0, 0, -1, 0], [0, 0, 0, 1]])

    print("Displaying original pointcloud ...")
    o3d.visualization.draw([pcd])
    print("Displaying cropped pointcloud")
    o3d.visualization.draw([chair])

2. crop

pcd_cropped = pcd.crop(bbox)  # pcd: PointCloud. bbox: AxisAlignedBoundingBox

AxisAlignedBoundingBox https://blog.csdn.net/jizhidexiaoming/article/details/130561514?spm=1001.2014.3001.5501

# 1. read pcd
print("Load a ply point cloud, crop it, and render it")
sample_ply_data = o3d.data.DemoCropPointCloud()
pcd = o3d.io.read_point_cloud(sample_ply_data.point_cloud_path)

# 2. 定义裁剪区域。沿着y轴过滤: 只返回y坐标在[0.1,2]之间的点
bounds_list = [[-math.inf, math.inf], [0.8, 2], [-math.inf, math.inf]]  # xyz边界范围
# list2tuple, limit points边界点。itertools.product排列笛卡尔乘积是x,y,z各取一个值,组成xyz点坐标
bbox_pt_list = list(itertools.product(*bounds_list))
bbox_pt_vec = o3d.utility.Vector3dVector(bbox_pt_list)  # list
bbox = o3d.geometry.AxisAlignedBoundingBox.create_from_points(bbox_pt_vec)

# 3. crop
pcd_cropped = pcd.crop(bbox)

# 4. display
# Flip the pointclouds, otherwise they will be upside down.
pcd_cropped.transform([[1, 0, 0, 0], [0, -1, 0, 0], [0, 0, -1, 0], [0, 0, 0, 1]])
o3d.visualization.draw(pcd_cropped)

3. crop_mesh

上面是裁剪PointCloud,这里裁剪TriangleMesh.

转成numpy,修改mesh的traingles和triangle_normals成员。

import open3d as o3d
import numpy as np
import copy

if __name__ == "__main__":
    # 1. read mesh
    knot_mesh = o3d.data.KnotMesh()
    mesh = o3d.io.read_triangle_mesh(knot_mesh.path)
    mesh.compute_vertex_normals()
    print("Displaying original mesh ...")
    o3d.visualization.draw([mesh])

    # 2. crop: triangles and triangle_normals
    print("Displaying mesh of only the first half triangles ...")
    mesh_cropped = copy.deepcopy(mesh)  # mesh_cropped.triangles. (num, 3)
    mesh_cropped.triangles = o3d.utility.Vector3iVector(  # triangles
        np.asarray(mesh_cropped.triangles)[:len(mesh_cropped.triangles) // 2, :])
    mesh_cropped.triangle_normals = o3d.utility.Vector3dVector(  # triangle_normals
        np.asarray(mesh_cropped.triangle_normals)
        [:len(mesh_cropped.triangle_normals) // 2, :])
    print(mesh_cropped.triangles)
    o3d.visualization.draw([mesh_cropped])

 

 

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

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

相关文章

哪些蓝牙耳机戴久不疼?长时间佩戴不疼的蓝牙耳机推荐

现在的真无线耳机已经成为了人们的标配之一了,各个厂家也紧随其后,生产出了多种无线耳机,不少人的选购蓝牙耳机一般都是对音质、佩戴和连接,但通常人们佩戴蓝牙耳机都是在半天左右,小编专门整理了一期舒适度高的耳机&a…

从 0~1 创建 Vue2 项目

前言 从0开始搭建Vue2项目;介绍项目目录结构;为了项目方便需要添加的配置。创建 Vue2 项目共有两种方式: 手动选择;选择默认模式。 给孩子点点关注吧!😭 一、环境准备 1.1 安装包管理工具 1.1.1 安装 …

使用CV-CUDA提高基于计算机视觉的任务吞吐量

使用CV-CUDA提高基于计算机视觉的任务吞吐量 涉及基于 AI 的计算机视觉的实时云规模应用程序正在迅速增长。 用例包括图像理解、内容创建、内容审核、映射、推荐系统和视频会议。 然而,由于对处理复杂性的需求增加,这些工作负载的计算成本也在增长。 从…

凌恩生物文献分享|南农大胡锋教授团队揭示苯并[a]芘胁迫影响蚯蚓肠道病毒组生态适应策略机制

蚯蚓被誉为“土壤生态系统工程师”,对于土壤结构改良、有机质分解、土壤污染修复具有重要意义,同时蚯蚓也被作为评估污染物生态风险的灵敏指示者。蚯蚓肠道微生物对于蚯蚓生态功能的发挥至关重要,为了充分利用蚯蚓的生态和生物技术效益&#…

Python每日一练:蚂蚁家族(详解集合法)

文章目录 前言一、题目二、代码分析总结 前言 这题挺有意思,感觉评简单难度有点低了,如果正经用无向图来做,代码还是有点长的。首先得建立节点,估计除第一个和最后一个每个节点都是一条线连进,一条线连出的。就可以这…

对接银行处理退票的解决方案

什么是退票? 在跨行支付时,付款请求提交汇出行后,由汇出行转交至人民银行支付系统,经人民银行大小额系统处理后会先返回交易成功的结果,再由人民银行转至收款行,收款行在清算过程中会将收款人账户信息、状…

MyBatis--XxxxMapper.xml-SQL 映射文件和MyBatis--动态SQL 语句-更复杂的查询业务需求

目录 MyBatis--XxxxMapper.xml-SQL 映射文件 XxxMapper.xml-基本介绍 MyBatis 的真正强大 2、SQL 映射文件 XxxMapper.xml-详细说明 因为这是一个宁外开了一个项目所以做一下前期准备 Monster.java MonsterMapper接口 MonsterMapper .xml MonsterMapperTest.java jdbc…

【sop】基于灵敏度分析的有源配电网智能软开关优化配置[升级1](Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

【AI大模型】教你用百度《文心一言》5分钟写一篇博客

文章目录 前言文心一言是什么文心一言可以做什么文心一言写博客申请体验写在最后 前言 当今社会,博客已成为了许多人分享观点、知识和经验的重要平台。用文心一言写博客是将自己的思考、想法和经验以文字的形式呈现出来,让更多人了解自己。通过写博客&a…

量化因子在 DolphinDB 中的流式实现攻略

DolphinDB 是一款高性能分布式时序数据库。与传统的关系数据库和常见的时序数据库不同,DolphinDB 不仅提供了高速存取时序数据的基本功能,而且内置了向量化的多范式编程语言与强大的计算引擎。DolphinDB 的计算引擎不仅可以用于量化金融的回测和研发&…

Aztec 征集 Rollup Sequencer去中心化提案

1. 引言 前序博客: Rollup去中心化Rollup Decentralization Aztec Rollup中Sequencer角色的主要职责为: 1)从mempool中选取pending交易2)将选中的pending交易排序打包到L2区块中3)验证所有private交易proof以检查其…

数据结构(C语言):递归算法删除链表中所有值为x的结点

一、一个递归算法的诞生过程 这个标题为什么要叫“一个递归算法的诞生过程”呢?因为我在写这个算法的时候可谓一波三折,冲破重重Bug最终才得到了正确的算法。 所以在这里我和大家分享一下我写这段代码的整个过程。其中提到的一些问题大家可能写代…

网络信息安全攻防学习平台CTF练习-基础篇

网络信息安全攻防学习平台 :http://hackinglab.cn/main.php 1、key在哪里? 进入环境之后,右击查看源代码,看到key再网页备注里面: 2、再加密一次你就得到key啦~ 根据提示信息,在加密一次就能得到key&#…

shell脚本----基础命令sort-tr-uniq-cut-split-paste-eval

文章目录 一、sort命令二、uniq命令三、 tr命令四、cut命令五、split命令六、paste命令七、eval命令 一、sort命令 sort命令以行为单位对文件内容进行排序,也可以根据不同的数据类型来排序,比较的原则是从首字符向后,一次按ASCII码的值进行比…

Mail.Ru邮箱注册教程

Mail.Ru 简介 Mail.Ru来自俄罗斯一家网络公司。该初始建立于1998年作为电子邮件服务(因此而得名),并继续成为网络的俄语圈主要参与者,每月活跃用户达到俄罗斯网络用户的86%,是俄罗斯最大的两家互联网企业之…

Java框架学习03(Spring中设计模式详解)

1、控制反转(IoC)和依赖注入(DI) IoC(Inversion of Control,控制反转) 是 Spring 中一个非常非常重要的概念,它不是什么技术,而是一种解耦的设计思想。 IoC 的主要目的是借助于“第三方”(Spring 中的 IoC 容器) 实现具有依赖关系的对象之间的解耦(IOC…

802. 找到最终的安全状态

class Solution { public:bool vis[40005];//vis[i]表示从节点i开始的所有可能路径是否可以到达终端节点vector<int>regraph[40005];map<int,int>mp;bool id_num[40005];bool dfs(vector<vector<int>>& graph,int st){if(mp[st] || vis[st])//如果…

内网渗透—域环境之信息收集

内网渗透—域环境之信息收集 1. 前言2. 关于域2.1. 域搭建2.2. 域渗透思路 3. 域信息收集3.1. 判断是否存在域3.1.1. 查询网络信息3.1.2. 查询当前登录域与域环境3.1.3. 判断主域 3.2. 查找域控制器3.2.1. 查询DNS地址3.2.2. 查看域控制器的机器名3.2.3. 查看域控制器 3.3. 获取…

媒体邀约之发布会彩排哪些内容和注意那些细节?

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 相信发布会前小伙伴都会进行彩排&#xff0c;对发布会的细节&#xff0c;流程&#xff0c;各个工种如何配合进行提前的演练&#xff0c;那么发布会彩排哪些内容&#xff0c;要注意哪些细节…

Linux shell编程常用命令(sort排序 uniq重复行 set +-x调试脚本 tr压缩替换字符 cut切片 split拆分 paste合并文件列 eval扫描变量)

sort命令 排序 以行为单位对文件内容进行排序&#xff0c;也可以根据不同的数据类型来排序 比较原则是从首字符向后&#xff0c;依次按ASCII码值进行比较&#xff0c;最后将他们按升序输出。 sort [选项] 参数 cat file | sort 选项-n 按照数字进行排序 -r 反向排序 -u 等同于u…