見出し画像

PythonのPillowでPLYファイルの2次元のサムネイルを作る

業務で3Dファイルのサムネが必要になった

Pythonでできるか試してみた。

元データ PLYファイル

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


できた!

thumbnail.png

まとめ

以下のPythonライブラリを使ってポイントクラウドファイルのPLYファイルのサムネイルを作成

  • numpy

  • pillow

  • trimesh

  • matplotlib

以上です。


いいなと思ったら応援しよう!