首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

Python用Open3d处理点云数据初步

  • 25-02-18 13:41
  • 2087
  • 8618
blog.csdn.net

文章目录

    • 初步使用
    • 交互
    • 数据集
    • 读取和清除点云

初步使用

open3d主要用于三维对象绘制,为Python提供了非常友好的接口,加之Intel维护给力,是Python中处理三维对象的首选模块。安装很方便,pip install open3d即可,装完即用。

比较常见的使用流程是,打开点云数据->处理->可视化,以斯坦福兔子为例,在open3d中打开效果如下。

在这里插入图片描述

绘制代码如下

import open3d as o3d
pcd = o3d.io.read_point_cloud("rabbit.pcd")
o3d.visualization.draw_geometries([pcd])
  • 1
  • 2
  • 3

其中,【io】中的【read_point_cloud】,用于读取点云数据;【visualization】中的【draw_geometries】用于显示点云列表。

交互

open3d的点云显示界面提供了诸多交互方法,比如点击拖动可改变视角,正负号可调节点的尺寸,【Ctrl】和正负号调节网格尺寸,左右方括号可用于调节视场角。

鼠标控制则很符合直觉,只需【Shift】、【Ctrl】加上鼠标左键来回拖动,试一下就会明白其操作机理,要比文字描述更直观。

下表列出了open3d图窗中常用的快捷键。

常规指令
H打印帮助和快捷键信息
Q/Esc退出窗口
R重置视点
N开关点云法线渲染
S切换平滑或网格平面着色
W开关网格线框
B开关背面渲染
I开关插值中的图像放大
T切换图像渲染
P截屏
D进行深度捕捉
O捕获当前渲染设置
L开关照明

数字键用于颜色控制,其中单独点击数设置点云颜色;Ctrl+数字设置网格颜色,Shift用于调用内置的伪彩映射

单独数字/CtrlShift
0默认灰度
1渲染点颜色JET颜色
2颜色对应x坐标Summer颜色
3颜色对应y坐标Winer颜色
4颜色对应z坐标HOT颜色
9正常颜色-

数据集

很多新入坑的萌新往往纠结于找不到斯坦福兔子,从而没有一个点云数据进行练习,继续学习也就更无从谈起了。

open3d提供了一个【data】模块,内置了很多数据集,但因为Github经常抽风上不了,所以实际使用体验并不友好。

为了手头有数据,可以直接在Github上下载:下载链接,进入之后向下拉,找到【Open3d Data】,第一页找不到就翻页找,总之可以找到Open3D Data [20220301]和20220201,点开【Assets】,就能看到下载链接了。

如果还是上不去Github,那就直接搜个Github镜像,总会找到能上去的。

下载完成后可直接在本地打开,以【PCDPointCloud】和【PLYPointCloud】为例,这两个点云图像如下

fragment.pcdfragment.ply
在这里插入图片描述在这里插入图片描述

下表中列出了open3d中的类和文件名的对应关系。

类单个文件
PCDPointCloudfragment.pcd
PLYPointCloudfragment.ply
EaglePointCloudEaglePointCloud.ply
JuneauImageJuneauImage.jpg
KnotMeshKnotMesh.ply
ArmadilloMeshArmadilloMesh.ply
BunnyMeshBunnyMesh.ply

以 Demo或 Sample开头的类

类说明
DemoColoredICPPointClouds包含两个ply格式的点云
DemoCropPointCloud包含一个点云和 cropped.json
DemoFeatureMatchingPointClouds两个点云分割和对应的FPFH和L32D特性
DemoICPPointClouds包含三个二进制pcd格式的点云
DemoPoseGraphOptimization2个json文件
SampleFountainRGBDImages33个彩色和深度图像
SampleNYURGBDImageNYU_color.ppm和 NYU_depth.pgm
SampleRedwoodRGBDImages5组彩色深度图像
SampleSUNRGBDImageSUN_color.jpg和 SUN_depth.png
SampleTUMRGBDImageTUM_color.png和 TUM_depth.png

从其他网站下载的数据集

LivingRoomPointClouds57个ply格式的点云
OfficePointClouds53个ply格式的点云

读取和清除点云

在Open3d中,除了读取点云文件之外,还可以通过数组来创建点云,其流程如下,其中pcd在创建之初是个空的点云,xyz是 N × 3 N\times3 N×3矩阵。

pcd = o3d.geometry.PointCloud()
pcd.points = o3d.utility.Vector3dVector(xyz)
  • 1
  • 2

【pcd.clear()】可清除pcd中的点云数据,以释放内存。

此外,点云类还提供了两个静态方法,【create_from_depth_image】和 【create_from_rgbd_image】,可通过深度图像或rgbd图像来生成点云,下面用一张RGB图像来演示一下这个功能

在这里插入图片描述

raw = o3d.io.read_image("test.jpg")
rgbd = o3d.geometry.RGBDImage.create_from_color_and_depth(raw, raw, convert_rgb_to_intensity=False)

inter = o3d.camera.PinholeCameraIntrinsic()
# 此为相机内部参数,是我乱写的 1920x1080为像素尺寸;(600,600)为x,y方向的焦距;(640,360)为相机位置
inter.set_intrinsics(1920, 1080, 600, 600, 640, 360)
pcd = o3d.geometry.PointCloud().create_from_rgbd_image(rgbd, inter)
o3d.visualization.draw_geometries([pcd])
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

绘图结果为

在这里插入图片描述

感觉很有冲击力。

点云颜色还可以通过paint_uniform_color来指定,后面会经常用到这个方法。

注:本文转载自blog.csdn.net的微小冷的文章"https://tinycool.blog.csdn.net/article/details/136952425"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top