File IO

Open3D による初等幾何ファイルの読み込み、書き込みの方法について説明。

各節で、次のコードについて説明する

In [2]:
# examples/Python/Basic/file_io.py

import open3d as o3d

if __name__ == "__main__":
    # (1)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)
    # (2) Mesh
    print("Testing IO for meshes ...")
    mesh = o3d.io.read_triangle_mesh("../../TestData/knot.ply")
    print(mesh)
    o3d.io.write_triangle_mesh("copy_of_knot.ply", mesh)
    # (3) Textured Mesh
    print("Testing IO for textured meshes ...")
    textured_mesh = o3d.io.read_triangle_mesh("../../TestData/crate/crate.obj")
    print(textured_mesh)
    o3d.io.write_triangle_mesh("copy_of_crate.obj",
                               textured_mesh,
                               write_triangle_uvs=True)
    copy_textured_mesh = o3d.io.read_triangle_mesh('copy_of_crate.obj')
    print(copy_textured_mesh)
    # (4)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 point cloud ...
geometry::PointCloud with 113662 points.
Testing IO for meshes ...
geometry::TriangleMesh with 1440 points and 2880 triangles.
Testing IO for textured meshes ...
geometry::TriangleMesh with 8 points and 12 triangles, and (320, 320) texture.
geometry::TriangleMesh with 8 points and 12 triangles, and (320, 320) texture.
Testing IO for images ...
Image of size 512x512, with 3 channels.
Use numpy.asarray to access buffer data.

http://whitewell.sakura.ne.jp/Oepn3D/copy_of_lena_color.jpg


Point Cloud

ポイントクラウド(点群)ファイルの読み込み(read_point_cloud)、書き込み(write_point_cloud)の関数の紹介。

examples/Python/Basic/file_io.pyの最初の部分コード:

In [ ]:
    # (1)Point Cloud
    print("Testing IO for meshes ...")
    mesh = o3d.io.read_triangle_mesh("../../TestData/knot.ply")
    print(mesh)
    o3d.io.write_triangle_mesh("copy_of_knot.ply", mesh)
Testing IO for point cloud ...
geometry::PointCloud with 113662 points.

print() 関数はpcdの内容要約の表示に使える。上記の結果表示されるメッセージは:

Testing IO for point cloud ...
PointCloud with 113662 points.

デフォルトでは、Open3Dはファイルの拡張子からファイルのタイプを推測しようとする。 以下は、サポートされているポイントクラウド(点群)・ファイルの型である:

ファイル形式 説明
xyz 各行が[x, y, z]となっているもの。ここでx, y, zは3D座標
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]となっているもの。ここでr, g, buint8で表現されている
ply Polygon File形式を参照のこと。このplyファイルはポイントクラウドもメッシュも含みうる
pcd Point Cloud Dataを参照のこと

次のように、ファイルの型を明示することも可能である。この場合、ファイル拡張子は無視される。

In [ ]:
pcd = o3d.io.read_point_cloud("my_points.txt", format='xyz')

Mesh

メッシュの読み込み(read_triangle_mesh)と書き込み(write_triangle_mesh)の関数の紹介。

examples/Python/Basic/file_io.pyの2番めの部分コード:

In [ ]:
    # (2) Mesh
    print("Testing IO for meshes ...")
    mesh = o3d.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.

ポイントクラウド(点群)とは異なり、メッシュは表面を定義する三角形の集まり、というデータ構造を持つ。

テクスチャのついたメッシュも扱える:

examples/Python/Basic/file_io.pyの3番目の部分コード:

In [ ]:
    # (3) Textured Mesh
    print("Testing IO for textured meshes ...")
    textured_mesh = o3d.io.read_triangle_mesh("../../TestData/crate/crate.obj")
    print(textured_mesh)
    o3d.io.write_triangle_mesh("copy_of_crate.obj",
                               textured_mesh,
                               write_triangle_uvs=True)
    copy_textured_mesh = o3d.io.read_triangle_mesh('copy_of_crate.obj')
    print(copy_textured_mesh)
Testing IO for textured meshes ...
geometry::TriangleMesh with 8 points and 12 triangles, and (320, 320) texture.
geometry::TriangleMesh with 8 points and 12 triangles, and (320, 320) texture.

デフォルトでは、Open3Dはファイルの拡張子からファイルのタイプを推測しようとする。 以下は、サポートされているメッシュ・ファイルの型である:

ファイル形式 説明
ply Polygon File形式を参照のこと。このplyファイルはポイントクラウドもメッシュも含みうる。
stl StereoLithography を参照のこと
obj Object Fileを参照のこと
off Object File 形式を参照のこと
gltf GL Transmission 形式を参照のこと

Image

画像の読み込み(read_image)と書き込み(write_image)の関数の紹介。

examples/Python/Basic/file_io.py の最後の部分コード:

In [ ]:
    # 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.