原文鏈接:https://blog.csdn.net/baidu_34172099/article/details/106756630
作為點雲可視化利器,居然百度了一圈沒有誰寫關於open3D與numpy互轉的介紹,看來這個畢竟還是小眾。翻了一遍官方介紹,還算簡單,這里介紹一下如何轉換。
NumPy to open3d.PointCloud
numpy轉open3D需要借助Vector3dVector函數,這樣可以直接賦值與open3d.PointCloud.points,具體操作如下,假設xyz、nxnynz、rgb分別是一個n*3numpy數組,則對於點數,法向量和顏色的轉換都可以借助Vector3dVector函數,具體操作如下:
import numpy as np import open3D as o3d pcd = o3d.geometry.PointCloud() pcd.points = o3d.utility.Vector3dVector(xyz) pcd.normals = o3d.utility.Vector3dVector(nxnynz) pcd.colors = o3d.utility.Vector3dVector(rgb)
open3d.PointCloud to NumPy
上面可以看出 open3D是對點做的而變化,所以反過來也是:
import numpy as np import open3d as o3d # Load saved point cloud and visualize it pcd_load = o3d.io.read_point_cloud("../../TestData/sync.ply") # convert Open3D.o3d.geometry.PointCloud to numpy array xyz_load = np.asarray(pcd_load.points) o3d.visualization.draw_geometries([pcd_load])