import copy
import numpy as np
import open3d as o3d
import argparse, readline
cmap = np.array([[1.00, 1.00, 1.00], [0.00, 0.00, 0.00], \
[1.00, 0.00, 0.00], [1.00, 0.00, 0.40], \
[1.00, 0.00, 0.80], [1.00, 0.20, 1.00], \
[1.00, 0.60, 1.00], [0.60, 0.80, 1.00], \
[0.20, 0.80, 1.00], [0.20, 0.80, 0.60], \
[0.20, 0.80, 0.00], [0.20, 0.40, 0.00], \
[0.20, 0.45, 0.40], [0.20, 0.40, 0.80], \
[0.60, 0.40, 0.80], [0.60, 0.80, 0.80], \
[0.60, 0.80, 0.40], [1.00, 0.60, 0.80]],'f') # 컬러맵 정의
if __name__ == "__main__":
parser = argparse.ArgumentParser() # 명령행 인자 파싱
parser.add_argument('--input_pcd', type=str, required=True) # pcd format is txt. xyzrgb
parser.add_argument('--input_label', type=str, required=True)
args = parser.parse_args()
label = np.loadtxt(args.input_label) # 라벨링 파일 로딩
label = label.astype(np.int32)
pcd_origin = np.loadtxt(args.input_pcd, delimiter=' ') # 텍스트 점군 파일 로딩. xyzrgb 포맷
pcd = o3d.geometry.PointCloud()
pcd.points = o3d.utility.Vector3dVector(pcd_origin[:,0:3]) # XYZ points
pcd.colors = o3d.utility.Vector3dVector(cmap[label]) # 라벨을 컬러로 변환해 각 점군마다 설정
o3d.visualization.draw_geometries([pcd]) # 가시화
print('end')
결과는 다음과 같다.
마무리
지금까지 Open3D 라이브러리 개념, 기능 및 사용법을 설명하고, 간단한 프로그램을 개발해 보았다. 대중적인 알고리즘이 포함되어 있어, 컴퓨터 그래픽스 관련 기술 개발 시 유용하다.