【Lidar】基于Python的Open3D库可视化点云数据

1 Open3D库介绍

1.1 介绍

        Open3D是一个开源的3D数据处理库,发布于2015年,目前已经更新到0.17.0版本。它基于MIT协议开源许可,使用C++11实现,并经过高度优化,还通过Python Pybinding提供了前端Python API。 Open3D为开发者提供了一组精心选择的数据结构和算法,内部实现高度优化并设置为并行化。它处理3D数据的各种应用,包括点云、网格、体积计算、可视化、深度学习、测量和场景图等。Open3D的目标是成为一个高效,可扩展和易用的3D数据处理库。

1.2 功能

  • 点云处理:Open3D可以读取和处理各种格式的点云数据,包括PLY,XYZ,PZSD等等。此外,它还提供了一些处理点云的函数,如滤波,配准,分割等等。
  • 网格处理:Open3D可以处理三角网格数据,包括读取和处理OBJ,PLY等等格式的三角网格数据。此外,它还提供了一些处理三角网格的函数,如平滑,重建等等。
  • 体积计算:Open3D提供了计算3D体积的功能。你可以使用它来计算点云或三角网格的体积。
  • 可视化:Open3D提供了可视化的功能。你可以使用它来显示点云,三角网格等等。此外,它还提供了一些交互式的工具,如旋转,缩放等等。
  • 深度学习:Open3D提供了支持深度学习的功能。你可以使用它来实现一些深度学习的算法,如卷积神经网络(CNN),循环神经网络(RNN)等等。此外,它还提供了一些预训练的模型,如PointNet,PointNet++等等。
  • 测量:Open3D提供了测量点云或三角网格之间距离的功能。你可以使用它来测量两个点云或三角网格之间的距离,或者一个点云或三角网格到另一个点云或三角网格的距离。
  • 场景图:Open3D提供了一个场景图的功能。你可以使用它来表示和操作场景中的物体。场景图是一种数据结构,可以有效地表示和管理场景中的物体之间的关系。

2 基于Python可视化点云

        主体函数:o3d.visualization.draw_geometries([pcd], window_name='Point Cloud View', width=1920,height=1080,left=50,top=50,point_show_normal=False,mesh_show_wireframe=False, mesh_show_back_face=False)

        参数含义:显示内容、窗口标题、长、宽、左边距、右边距、是否可视化法线、是否可视化网络线框、是否可视化网络三角形背面。

# -*- coding: utf-8 -*-
"""
@Time : 2023/11/3 14:37
@Auth : RS迷途小书童
@File :Convert Raster And Vector.py
@IDE :PyCharm
@Purpose:点云可视化
"""
import open3d as o3d
import numpy as np
import matplotlib.pyplot as pltdef point_show(path, point_type):pcd = o3d.io.read_point_cloud(path, format=point_type, remove_nan_points=True, remove_infinite_points=True, print_progress=True)# 路径、输入格式、删除包含NAN的所有点、删除包含无限值的所有点、可视化进度条print(pcd)  # 输出点云点的个数print(np.asarray(pcd.points))  # 输出点的三维坐标"""格式	    描述xyz	    每一行包含[x,y,z],其中x,y,z是三维坐标xyz n	每一行包含[x,y,z,nx,ny,nz],其中x,y,z是三维坐标,nx,ny,nz是法向量xyz rgb	每一行包含[x,y,z,r,g,b],其中x,y,z是三维坐标,r,g,b是颜色信息,取值范围是[0,1]pts	    第一行是表示点数的整数。随后的行遵循以下一种格式:[x,y,z,i,r,g,b],[x,y,z,r,g,b],[x,y,z,i]或[x,y,z],,其中x,y,z,i是double类型,r,g,b是un int8类型ply	    见:多边形文件格式,ply文件可同时包含点云和网格数据pcd	    见:点云数据"""# pcd.paint_uniform_color([0, 1, 1])  # 固定颜色显示# pcd.colors = o3d.utility.Vector3dVector(np.random.uniform(0, 1, (1,3)))  # 随机颜色显示o3d.visualization.draw_geometries([pcd], window_name='Point Cloud View', width=1920, height=1080, left=50, top=50,point_show_normal=False, mesh_show_wireframe=False, mesh_show_back_face=False)# zoom=0.3412,front=[0.4257, -0.2125, -0.8795],lookat=[2.6172, 2.0475, 1.532],up=[-0.0694, -0.9768, 0.2024]# 显示内容、窗口标题、长、宽、左边距、右边距、是否可视化法线、是否可视化网络线框、是否可视化网络三角形背面o3d.io.write_point_cloud(r'1.xyz', pcd, write_ascii=False, compressed=False, print_progress=True)# 路径、文件、以ascii格式输出否则使用二进制输出、以压缩格式写入、可视化进度条if __name__ == "__main__":Path = r'彭俊喜/433 - Cloud1 - Cloud.ply'Type = 'ply'point_show(Path, Type)

3 总结

        上诉的代码中还包含了保存点云的代码,之后如果对点云数据处理后就可以使用这个代码对数据进行保存。Open3D库是一个非常强大的点云处理库,后续我会更新更多的相关代码,如果感兴趣可以关注我。对咯!可视化的窗口是有快捷键的,但是我记不太清,R应该是重置视角,Q是退出窗口,鼠标滑轮可以控制大小,其他的我忘了。。。。。。

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

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

相关文章

C语言之atoi函数的使用和模拟实现

C语言之atoi函数的使用和模拟实现 1. atoi函数介绍 函数声明如下: int atoi (const char * str);atoi是用来将字符串中第一次出现的数字字符,转为一个整数 跳过空白字符,(空白字符包括:空格 ’ ’ ,换页…

我叫:基数排序【JAVA】

1.自我介绍 基数排序(radix sort)属于“分配式排序” (distribution sort),又称“桶子法” (bucket sort)或bin sort,它是通过键值的各个位的值,将要排序的元素分配至某些“桶”中,是‘桶排序’的扩展 2.基本思想 将所有待比较数值统一为同样的数位长度,数位较短的数…

docker start一个容器之后,怎么进入这个容器界面

要进入已经启动的 docker 容器的交互式终端,可以使用 docker exec 命令。这个命令可用于在运行中的容器内部执行命令或脚本,并以交互模式与容器进行交互,具体格式如下: # docker exec -it [container_id or container_name] /bin/…

专业的调查问卷平台推荐:提升数据收集与分析效率

无论是学生还是职场人士,想做好一份调查问卷,关键先要确定调查的主题,然后确定调查人群,编辑问题,最后能够尽可能的美化问卷调查的主题。 想要做到这几点,就要要求问卷调查平台: 1、能够帮助你快速制作出一…

【开题报告】基于模糊控制的花卉光照时间控制系统

题 目 基于模糊控制的花卉光照时间控制系统 一、研究目的和意义 用光电传感器检测自然光,根据花卉开花时长,用MATLAB软件,使用模糊控制算法,对测得数据进行分析,得出结论,并传回下位机控制电机运动…

软件测试测试文档的编写和阅读

在软件测试中的流程中,测试文档也是一个重要的流程,所以测试人员也需要学习测试文档的编写和阅读。 一、定义: 测试文档(Testing Documentation)记录和描述了整个测试流程,它是整个测试活动中非常重要的文…

QT应用示例

一个简单的QT应用示例:创建一个窗口程序。 首先,确保已经安装了Qt开发环境。接下来,按照以下步骤创建一个简单的窗口程序: 1. 打开Qt Creator,点击“新建文件或项目”。 2. 选择“应用程序”,然后点击“下…

年终好价节有什么必买的数码好物?值得入手的数码好物推荐

大家是不是都没听说过好价节?直白点说就是原来的双十二购物狂欢节,只不过换一个说法,不过今年毕竟是第一年换个说法,所以淘宝年终好价节优惠还是值得我们期待的!作为年前的最后一波大促,一起来看看有哪些好…

QML通用属性 pyside6

在 QML 中,几乎所有组件都继承自 Item 类型,因此它们共享一些通用的属性。 QML 组件通用属性 位置和尺寸 x 和 y: 组件在其父元素中的位置坐标 Item {x: 100y: 100 }width 和 height: 组件的宽度和高度 Item {width: 200height: 100 }z: 组件在 Z 轴…

SQL server界面操作链接服务器

1.打开链接服务器,右击连接服务器“新建链接服务器” 2.输入链接服务器名称和数据源 3.安全性中输入密码建立远程连接,点击确定: 4.打开新建的连接服务器,测试连接: 注意:链接服务器必须在局域网执行,不是同…

【Openstack Train安装】十、Neutron安装

Neutron,是Openstack中的一大核心组件,设计目标是实现“网络即服务(Networking as a Service)”。为了达到这一目标,在设计上遵循了基于 SDN 实现网络虚拟化的原则,在实现上充分利用了 Linux 系统上的各种网…

Python简单线性回归算法实现及应用示例

简单线性回归,是一种使用单个特征预测响应的方法。 它是机器学习爱好者了解的最基本的机器学习模型之一。 在线性回归中,我们假设两个变量,即因变量和自变量是线性相关的。 因此,我们尝试找到一个线性函数,作为特征或自…

4.5-容器之间的link

我们在实际项目中可能会有种需求,假如我们有个后台项目,它要访问数据库,比如MySQL,它想要访问数据库,就需要数据库的ip和端口。如果有两个容器,一个容器启动的是数据库的MySQL服务,另一个容器启…

时间序列分析【python代码实现】

时间序列分析是一种用于建模和分析时间上连续观测的统计方法。 它涉及研究数据在时间维度上的模式、趋势和周期性。常见的时间序列分析包括时间序列的平稳性检验、自相关性和部分自相关性分析、时间序列模型的建立和预测等。 下面是一个使用Python实现时间序列分析的示例&…

通过分析波形,透彻理解 UART 通信

UART是一种异步全双工串行通信协议,由 Tx 和 Rx 两根数据线组成,因为没有参考时钟信号,所以通信的双方必须约定串口波特率、数据位宽、奇偶校验位、停止位等配置参数,从而按照相同的速率进行通信。 异步通信以一个字符为传输单位…

Vue修改密码功能的源代码

基本需求 输入框不能为空 旧密码表单提交时必须正确 两次输入新密码一致 限定新密码的复杂度&#xff0c;这里是长度在 6 到 20 个字符 <template><el-form ref"form" :model"user" :rules"rules" label-width"80px"><…

给企业做公众号运营你都有哪些宝贵经验?

运营企业公众号需要长期的坚持和不断的创新&#xff0c;如何运营好一个企业公众号&#xff0c;使其成为企业与受众互动、传递价值、提升品牌形象的平台&#xff0c;是许多企业所面临的挑战。但只要不断学习&#xff0c;总结经验&#xff0c;就一定能够找到适合自己企业的公众号…

数据集笔记 :PEMS-BAY

数据地址&#xff1a;DCRNN - Google 云端硬盘 各station 位置&#xff1a;DCRNN/data/sensor_graph/graph_sensor_locations_bay.csv at master liyaguang/DCRNN (github.com) 1 读取 数据 import h5py fileDownloads/pems-bay.h5fh5py.File(file,r) f.keys()f[speed] #&…

几个python 编程题。

请定义一个Cylinder类&#xff0c; (1)每个Cylinder类对象可以存储一个圆柱体(包括半径和高) (2)具有用于初始化半径和高的方法 (3)具有输出圆柱体信息的方法Printlnfo ; (4)具有计算圆柱体体积的方法GetVolume. class Cylinder:def __init__(self, radius0.0, height0.0):self…

PHP调用API接口的方法及实现(一键采集淘宝商品详情数据)

随着互联网、云计算和大数据时代的到来&#xff0c;越来越多的应用程序需要调用第三方的API接口来获取数据&#xff0c;实现数据互通和协同工作。PHP作为一种常用的服务器端语言&#xff0c;也可以通过调用API接口来实现不同系统的数据交互和整合。本文将介绍PHP调用API接口的方…