スポンサーリンク

PythonでOpen3dを使う(PointCloud作成)。あとPythonの配列もちょっと。

PointCloudのサンプルは沢山あるのだがランダム頂点を表示するような物ばかりで、任意の頂点を追加する方法がわからず一月近く調べていた。Pythonは普段使わないのでそういうことになったのだが以下がとりあえずの答。

import open3d
import numpy

# 点群型データ作成
pcd = open3d.geometry.PointCloud()

# 座標設定
pcd.points.append([0.0,0.0,0.0])
pcd.points.append([1.0,1.0,1.0])
pcd.points.append([1.0,2.0,0.0])

# 色設定
pcd.colors.append([1.0,0.0,0.0]);
pcd.colors.append([0.0,1.0,0.0]);
pcd.colors.append([0.0,0.0,1.0]);

# 法線設定
pcd.normals.append([1.0,0.0,0.0]);
pcd.normals.append([0.0,1.0,0.0]);
pcd.normals.append([0.0,0.0,1.0]);

open3d.visualization.draw_geometries(
  [pcd],
  width=400,
  height=400,
  point_show_normal = True
  )

調べた手順

一応、私のように必要に迫られてPythonやってる人のためにどうやって調べたかを書いておくと、以下のプログラムを書いて走らせる。

import open3d

pcd = open3d.io.read_point_cloud("bun000.ply")
print( type ( pcd.points ) )
print( type ( pcd.points[0] ) )

すると以下のような結果を得られる。

<class 'open3d.cpu.pybind.utility.Vector3dVector'>
<class 'numpy.ndarray'>

これでどうやらVector3dVectorという型が頂点リストになっているらしいので以下を検索する。

http://www.open3d.org/docs/release/python_api/open3d.utility.Vector3dVector.html

append(self: open3d.cpu.pybind.utility.Vector3dVector, x: numpy.ndarray[float64[3, 1]])

するとappendぽい関数がある。この読み方、

引数名:データ型 , 引き数名:データ型 , …

となっているらしい。で、pythonのselfはC++におけるthisなので無視して、与えるのがxでその型がnumpy.ndarrayだと言うのでndarrayについて調べる。

受け手側がndarrayなので、ndarrayには普通の配列[x,y,z]などをそのまま入れられるらしい?ので、最初のコードになる。

コメントを残す

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)


この記事のトラックバックURL: