基于Open3D的点云处理3-可视化

news2024/11/17 13:55:13

可视化接口

API

open3d.visualization.draw_geometries(*args, **kwargs)

重载函数1

draw_geometries(geometry_list, window_name=’Open3D’, width=1920, height=1080, left=50, top=50, point_show_normal=False, mesh_show_wireframe=False, mesh_show_back_face=False)
  • geometry_list:待显示的所有实体组成的列表
  • window_name=‘Open3D’ :命名窗体
  • width=1920 :窗体宽度
  • height=1080 :窗体高度
  • left=50 :左边缘宽度
  • top=50, :上边缘宽度
  • point_show_normal=False :是否显示法向
  • mesh_show_wireframe=False:是否可视化网格线框
  • mesh_show_back_face=False:是否可视化三角网格背面

重载函数2

draw_geometries(geometry_list, window_name=’Open3D’, width=1920, height=1080, left=50, top=50, point_show_normal=False, mesh_show_wireframe=False, mesh_show_back_face=False, lookat, up, front, zoom)
  • lookat:摄影机的注视向量
  • up:相机的上方向量
  • front:摄影机的前向量
  • zoom:相机的缩放系数

键盘鼠标操作

  • 旋转: 鼠标左键拖动
  • 平移: 鼠标中键拖动/ Ctrl+左键拖动
  • 放大、缩小:鼠标滚轮
  • 重置视点:R
  • 记录视点、恢复视点:Ctrl+C, Ctrl+V
  • 根据x轴坐标大小渲染:2
  • 更改colormap:shift+0-4
  • 退出:Q
  • 帮助: H(最重要)
import open3d as o3d
import numpy as np
if __name__ == '__main__':
    ply = o3d.io.read_point_cloud('bunny10k.ply', 'auto', True, True)
    o3d.visualization.draw_geometries([ply],
                                      window_name='Open3D',
                                      width=1920, height=1080,
                                      point_show_normal=False)


在这里插入图片描述

设置颜色

paint_uniform_color(self, color)
  • 归一化RGB颜色,值的范围在[0,1]之间,所有点同色;
import open3d as o3d
import numpy as np
if __name__ == '__main__':
    ply = o3d.io.read_point_cloud('bunny10k.ply', 'auto', True, True)
    ply.paint_uniform_color([0, 0, 1])
    #ply.paint_uniform_color([1, 0, 1])
    # ply.paint_uniform_color([1, 0, 0])
    o3d.visualization.draw_geometries([ply],
                                      window_name='Open3D',
                                      width=1920, height=1080,
                                      point_show_normal=False)

在这里插入图片描述

设置索引点颜色

import open3d as o3d
import numpy as np
if __name__ == '__main__':
    ply = o3d.io.read_point_cloud('bunny10k.ply', 'auto', True, True)
    ply.paint_uniform_color([0, 0, 1])
    color=np.array(ply.colors)
    inlier=[i for i in range(0,color.shape[0]) if i % 2==0]
    color[inlier]=[1,0,0]
    ply.colors=o3d.utility.Vector3dVector(color[:, :3])
    o3d.visualization.draw_geometries([ply],
                                      window_name='Open3D',
                                      width=1920, height=1080,
                                      point_show_normal=False)

在这里插入图片描述

可视化法线

estimate_normals(self, search_param=KDTreeSearchParamKNN with knn = 30, fast_normal_computation=True)
import open3d as o3d
import numpy as np
if __name__ == '__main__':
    ply = o3d.io.read_point_cloud('bunny10k.ply', 'auto', True, True)
    ply.paint_uniform_color([0, 0, 1])
    # 计算法线,搜索半径0.01m,只考虑邻域内的30个点
    ply.estimate_normals(search_param=o3d.geometry.KDTreeSearchParamHybrid(radius=0.01, max_nn=30))
    o3d.visualization.draw_geometries([ply],window_name="Open3D", width=1920, height=1080,left=50, top=50,point_show_normal=True )

在这里插入图片描述

隐藏点移除

hidden_point_removal(self, camera_location, radius)
  • 移除点云中的隐藏点并返回剩余点的网格;
  • camera_location (numpy.ndarray[float64[3, 1]]): 所有在那个位置看不见的地点都会被移除;
  • radius (float): 球投影的半径
import open3d as o3d
import numpy as np
pcd = o3d.io.read_point_cloud("bunny10k.ply")
_, pt_map = pcd.hidden_point_removal([0,0,0.5], 25)
pcd = pcd.select_by_index(pt_map)
o3d.visualization.draw_geometries([pcd])

在这里插入图片描述

可视化界面设置

  • 背景颜色
  • 坐标系
  • 点云大小等
import open3d as o3d
import numpy as np
pcd = o3d.io.read_point_cloud('bunny10k.ply')
#可视化句柄
viewer = o3d.visualization.Visualizer()
viewer.create_window(window_name='可视化', width=1920, height=1080)
#界面参数选项
opt = viewer.get_render_option()
#背景颜色
opt.background_color = np.asarray([0, 1, 0])
#点大小
opt.point_size = 1
#添加坐标系
opt.show_coordinate_frame = True
#颜色
pcd.paint_uniform_color([1, 0, 0])
viewer.add_geometry(pcd)
#激活界面循环
viewer.run()
viewer.destroy_window()

在这里插入图片描述

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

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

相关文章

B树

文章目录 B树的定义和性质为什么需要B树B树的定义 B树的模拟实现节点的数据结构B树的插入B树的删除 B树的模拟实现 B树的定义和性质 我们之前已经对 平衡搜索二叉树有了一定的了解,学习了两种树——AVL树 和 红黑树,下面介绍一下B树 为什么需要B树 数…

Nacos 服务网格⽣态

博主介绍:✌全网粉丝4W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战、定制、远程,博主也曾写过优秀论文,查重率极低,在这方面…

为一加七Pro(LineageOs17.1 4.14内核版本)编译KernelSu

编译内核 因为一加七的内核版本是4.14,所以想使用kernelsu,需要自己将kernelsu编译到内核里。 我使用的系统是:LineageOS17.1,对于之后的lineage版本同样适用,只是拉取的源代码不一样。刷机教程请看:wsl2…

vue diff算法与虚拟dom知识整理(3) 了解h函数和虚拟节点概念 实现虚拟节点上dom树

虚拟dom之前我们也有了基本的了解 简单说 就是用js数据结构来描述html的dom结构树 首先 为什么要用虚拟dom啊? 官方给出的回答是 diff最小量精细化算法是发生在虚拟dom上的 也就是 我们之前说的 节点与节点比较 并不是发生在html元素上的 而是发生在js中的虚拟dom上…

【C++学习】类和对象--多态【待补充】

多态的基本语法 多态是C面向对象三大特性之一 静态多态: 函数重载和运算符重载属于静态多态,复用函数名(函数地址早绑定,编译阶段确定函数地址) 动态多态: 派生类和虚函数实现运行时多态(函数地…

centos7.6 yum 安装mysql

目录 1. 删 mariadb / 自带MySQL 2 安装wget命名 3 下载并安装MySQL官方的 Yum Repository 4 使用yum安装mysql 5 启动 6 获取密码 7 登录 -> 没有获取到 就直接按回车 不输入 8 设置密码 及权限 --> root 账号所有语句报错 9 参考 1. 删 mariadb / 自带MySQL…

《计算机网络——自顶向下方法》精炼——2.7.2(TCP套接字编程)

“学习的敌人是自己的满足。” —— 叶圣陶 文章目录 TCP套接字编程TCP套接字编程概述客户进程服务器进程 TCP套接字编程 TCP套接字编程概述 TCP是一个面向连接的运输层协议,因此可以分为发起连接的阶段和传输阶段。 发起连接时,客户进程创建一个客户…

【LeetCode】221.最大正方形

221.最大正方形(中等) 题解 对于在矩阵内搜索正方形或长方形的题型,一种常见的做法是:定义一个二维 dp 数组,其中 dp[i][j] 表示满足题目条件的、以(i,j)为右下角的正方形或长方形属性。在本题中…

【备战蓝桥杯国赛-国赛真题】费用报销

题目链接:https://www.dotcpp.com/oj/problem2696.html 思路 读完题,再看一眼数据范围,这道题的做法也就确定了——DP。 DP的题目往往很容易辨识出来,所以我们就往DP上想了,第一要素是选出的所有票据里面&#xff0c…

【LeetCode】64. 最小路径和

64. 最小路径和(中等) 方法一:常规动态规划 思路 定义一个二维 dp 数组,其中 dp[i][j]表示从左上角开始到(i, j)位置的最优路径的数字和。因为每次都只能向下或者向右移动,所以很容易发现 dp数组…

汽车行业V模型开发详解

在新能源汽车开发过程中,通常会采用V模型(V-Model)进行系统开发。V模型是一种基于需求分析、体系架构设计、硬件和软件开发、集成测试以及产品验证的系统工程方法。 下面简要介绍新能源汽车V模型开发的主要阶段: V模型开发&…

encrypted勒索病毒攻击nas服务器,服务器中了勒索病毒解密数据恢复

近年来,勒索病毒的攻击技术不断升级,各种加密型的病毒不断出现,给我们工作和生活带来了很大困扰。其中,encrypted勒索病毒攻击NAS网络存储设备已经变得越来越常见。而这次我们将为大家探讨如何预防encrypted勒索病毒攻击NAS服务器…

springboot+vue教师人事档案管理系统(源码+文档)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的教师人事档案管理系统。项目源码以及部署相关请联系风歌,文末附上联系信息 。 💕💕作者&#xff1…

架构集群部署

这是一个简单的集群框架 192.168.142.10做负载均衡(主) 192.168.142.20(副) 先做keepalive 两台nginx做七层反向代理(动静分离) 192.168.142.30 192.168.142.40 部署tomcat做多实例部署 192.168.14…

linux驱动开发 - 11_Linux 下的驱动分离与分层

文章目录 11. Linux 下的驱动分离与分层1 驱动的分隔与分离2 驱动的分层 11. Linux 下的驱动分离与分层 1 驱动的分隔与分离 linux是一个成熟、复杂、庞大的操作系统,代码的重用性很重要,不然会在linux内核存在大量的无意义重复的代码。尤其的驱动程序…

进阶Spring(2)-BeanFactory和ApplicationContext实现

🏠个人主页:阿杰的博客 💪个人简介:大家好,我是阿杰,一个正在努力让自己变得更好的男人👨 目前状况🎉:24届毕业生,奋斗在找实习的路上🌟 &#x1…

[Data structure]单链表常见算法题

⭐作者介绍:大二本科网络工程专业在读,持续学习Java,努力输出优质文章 ⭐作者主页:逐梦苍穹 ⭐所属专栏:数据结构。数据结构专栏主要是在讲解原理的基础上拿Java实现 ⭐如果觉得文章写的不错,欢迎点个关注一…

Hibernate(二)——Springboot整合Hibernate

在了解了Hibernate后&#xff0c;进一步将Hibernate和Springboot整合。 目录 引入依赖配置文件代码BeanDao层Service层Controller层 测试JpaRepository接口 引入依赖 <!--引入hibernate--> <dependency><groupId>org.springframework.boot</groupId>…

【大数据处理与可视化】四、数据预处理

【大数据处理与可视化】四、数据预处理 实验目的实验内容实验步骤一、案例——预处理部分地区信息1、导包2、读取文件3、检查并删除重复数据北京天津&#xff08;无重复数据&#xff09; 4、检查缺失值北京&#xff08;无缺失值&#xff09;天津&#xff08;向前填充&#xff0…

10分钟学会搭建sovits第一篇

So-vits-svc 基于端到端架构的VITS和soft-vc&#xff0c;用户只需准备几十分钟到几个小时不等的语音或歌声数据&#xff0c;就能制作&#xff08;训练&#xff09;属于自己的 AI 声库 &#xff08;前提是你的显卡足够给力&#xff09;&#xff0c;将一段语音或歌声转换为你想要…