PythonのPillowでPLYファイルの2次元のサムネイルを作る
業務で3Dファイルのサムネが必要になった
Pythonでできるか試してみた。
元データ PLYファイル
利用するPythonライブラリ
numpy:
数値計算用のPythonライブラリ。効率的な配列操作を提供。
Pillow:
画像処理用のPythonライブラリ。画像の読み書きや変換を行う。
trimesh:
3Dメッシュ操作用ライブラリ。PLYファイルの読み込みや処理をサポート。
matplotlib:
グラフ作成用のPythonライブラリ。2D/3Dプロット機能を提供。
Pythonコード
thumbnail_generator.py
import numpy as np
import trimesh
import matplotlib.pyplot as plt
from PIL import Image
def create_thumbnail(ply_file_path, output_path):
# PLYファイルを読み込む
mesh = trimesh.load(ply_file_path)
# プロットを作成
fig = plt.figure(figsize=(4, 4), dpi=50)
ax = fig.add_subplot(111, projection='3d')
# メッシュをグレースケールでプロット
ax.plot_trisurf(mesh.vertices[:,0], mesh.vertices[:,1], triangles=mesh.faces, Z=mesh.vertices[:,2], color='grey', edgecolor='none')
# カメラの角度を設定
ax.view_init(30, 30)
# 軸をオフにする
ax.axis('off')
# 画像として保存
plt.savefig(output_path, bbox_inches='tight', pad_inches=0)
plt.close(fig)
# 画像をトリミングして保存
img = Image.open(output_path)
img = img.crop(img.getbbox())
img.save(output_path)
print(f'Thumbnail saved to {output_path}')
# メイン処理
ply_file_path = '/Users/kawamotonaoki/Desktop/motorbike-ply/Motorbike_ply.ply'
output_path = 'thumbnail.png'
create_thumbnail(ply_file_path, output_path)
python thumbnail_generator.py
できた!
まとめ
以下のPythonライブラリを使ってポイントクラウドファイルのPLYファイルのサムネイルを作成
numpy
pillow
trimesh
matplotlib
以上です。