pythonで点群処理できるOpen3Dの探検.Open3Dの使い方:読み込みと表示,点と法線の取得の続き.
点群のコンストラクタはpy3d.PointCloud()
.コピーコンストラクタしかないようなので,空で生成しておいて後から.points追加.するとhas_points()も自動的に更新される.
コード
open3d
import sys
sys.path.append("../..") # Open3D/build/lib/ へのパス
import numpy as np
import py3d
# 球状の点群を生成
## 面倒なので立方体中にランダムな点を作ってL2ノルムで正規化.よい子は真似しない
sphere = np.random.rand(10000, 3) - np.array([0.5, 0.5, 0.5])
sphere /= np.linalg.norm(sphere, axis=1, keepdims=True)
pcd = py3d.PointCloud() # コンストラクタ
print("has points?", pcd.has_points()) # ここではFalse
pcd.points = py3d.Vector3dVector(sphere)
print("has points?", pcd.has_points()) # ここでTrueになってる
py3d.draw_geometries([pcd], "sphere points", 640, 480)
print("has color?", pcd.has_colors()) # ここではFalse
pcd.colors = py3d.Vector3dVector(np.random.rand(10000, 3))
print("has color?", pcd.has_colors()) # ここでTrueになってる
py3d.draw_geometries([pcd], "sphere points with random colors", 640, 480)
print("has normals?", pcd.has_normals()) # ここではFalse
py3d.estimate_normals(pcd, search_param = py3d.KDTreeSearchParamHybrid(radius=0.1, max_nn=30))
print("has normals?", pcd.has_normals()) # ここでTrueになってる
py3d.draw_geometries([pcd], "sphere points with normals", 640, 480)
結果
結果
has points? False
has points? True
has color? False
has color? True
has normals? False
has normals? True