Open3d学习计划(2)
Open3D是一个开源库,支持快速开发和处理3D数据。Open3D在c++和Python中公开了一组精心选择的数据结构和算法。后端是高度优化的,并且是为并行化而设置的。
本系列学习计划有Blue同学作为发起人,主要以Open3D官方网站的教程为主进行翻译与实践的学习计划。点云PCL公众号作为免费的3D视觉,点云交流社区,期待有使用Open3D或者感兴趣的小伙伴能够加入我们的翻译计划,贡献免费交流社区,为使用Open3D提供中文的使用教程。
在上篇文章,我们介绍了Open3D是什么,和Python版本的如何安装。本篇文章将介绍原文档中Open3D得基础用法,本文翻译文档为0.10.0版本open3d文档,更多之前版本的信息请去查阅官方文档,不同版本API会有少许不同,请注意(如果在使用中提示没有某个类或者函数,就去上篇文章找到官方文档接口,去看看是不是函数发生了变化)
Python接口
本节将会介绍如何导入open3d包并打印帮助信息。通过下面的代码就可以导入open3d
import open3d as o3d #导入open3d
pcd = 03d.io.read_point_cloud("../../TestData/ICP/cloud_bin_0.pcd")
print(pcd)
##打印: geometry::PointCloud with 198835 points.
这里是从open3d模块中导入read_point_cloud函数,该函数可以读取点云文件并返回一个Pointcloud实例。print(pcd)可以打印点云的简略信息。
使用内置的帮助功能
help(o3d)可以打印open3d模块文件
help(03d)
打印open3d中某个类的描述
help(open3d.PointCloud)可以用来打印PointCloud类的描述。
help(o3d.geometry.PointCloud)
打印open3d中某个函数的描述
help(open3d.io.read_point_cloud)提供了read_point_cloud函数的描述,主要包括输入参数和返回类型。
help(o3d.io.read_point_cloud)
文件IO-点云(Point Cloud)
这一节将会介绍基本几何图形的读取和写入,点云(Point Cloud)通过下面的代码读写点云
print("Testing IO for point cloud ...")
pcd = o3d.io.read_point_cloud("../../TestData/fragment.pcd")
print(pcd)
o3d.io.write_point_cloud("copy_of_fragment.pcd", pcd)
>>>>Testing IO for point cloud ...
>>>>geometry::PointCloud with 113662 points.
print()能用来显示点云的摘要.
open3d可以通过文件扩展名自动推断文件类型,下面是支持的点云文件类型。
Format |
Description |
xyz |
每一行包括 [x,y,z] 三个值,x,y,z 是三维坐标 |
xyzn |
每一行包括 [x,y,z,nx,ny,nz] 六个值,其中nx,ny,nz 是法线 |
xyzrgb |
每一行包括 [x,y,z,r,g,b] 六个值,这里r,g,b的范围在[0,1]浮动 |
pts |
第一行是一个整数,表示点的个数。之后每一行包括 [x,y,z,i,r,g,b] 七个值,其中rgb的类型为uint8 |
ply |
这个格式可以包含点云和网格数据,详情请参考这个链接http://paulbourke.net/dataformats/ply/ |
pcd |
请看官方给出的php文件,链接http://www.open3d.org/docs/release/tutorial/Basic/file_io.html |
也可以显示的指定文件类型,这样将会忽略文件扩展名。
pcd =o3d.io.read_point_cloud("../../my_points.txt",format='xyz')
文件IO-网格(Mesh)
通过以下代码可以读写网格数据。
print("Testing IO for meshes ...")
mesh = 03d.io.read_triangle_mesh("../../TestData/knot.ply")
print(mesh)
o3d.io.write_triangle_mesh("copy_of_knot.ply",mesh)
>>>>Testing IO for meshes ...
>>>>geometry::TriangleMesh with 1440 points and 2880 triangles.
与点云的数据结构相比,网格(mesh)数据具有定义三维曲面的三角形。与点云数据一样,会自动通过文件类型推断,支持的mesh数据格式如下。
Format |
Description |
ply |
同点云 |
stl |
http://www.fabbers.com/tech/STL_Format |
obj |
http://paulbourke.net/dataformats/obj/ |
off |
http://www.geomview.org/docs/html/OFF.html |
gltf |
https://github.com/KhronosGroup/glTF/tree/master/specification/2.0 |
文件IO-图像(Image)
通过以下代码可以读写图像数据
print("Testing IO for images ...")
img = o3d.io.read_image("../../TestData/lena_color.jpg")
print(img)
o3d.io.write_image("copy_of_lena_color.jpg", img)
>>>>Testing IO for images ...
>>>>Image of size 512x512, with 3 channels.
>>>>Use numpy.asarray to access buffer data.
使用print(img)可以很容易的显示图像的大小。
如果你对Open3D感兴趣,或者正在使用该开源方案,就请加入我们,一起翻译,一起学习,贡献自己的力量,目前阶段主要以微信群为主,有意者发送“Open3D学习计划”到公众号后台,和更多热爱分享的小伙伴一起交流吧!
以上内容如有错误请留言评论,欢迎指正交流。如有侵权,请联系删除
扫描二维码
关注我们
让我们一起分享一起学习吧!期待有想法,乐于分享的小伙伴加入免费星球注入爱分享的新鲜活力。分享的主题包含但不限于三维视觉,点云,高精地图,自动驾驶,以及机器人等相关的领域。