通过 .ply 格式将 3D 点导出到 Blender 会创建一个空对象,而它在 MeshLab 中工作
Posted
技术标签:
【中文标题】通过 .ply 格式将 3D 点导出到 Blender 会创建一个空对象,而它在 MeshLab 中工作【英文标题】:Exporting 3D points to Blender via the .ply format creates an empty object, while it works in MeshLab 【发布时间】:2022-01-15 02:54:12 【问题描述】:我制作了一个 Python 脚本来使用图像和 3D 扫描点云创建一个 .ply 文件,存储为 NumPy 数组。
我可以在 MeshLab 中打开生成的 file.ply。效果很好。
但是当我在 Blender 中导入它时,没有意义。结果对象为空。
你知道如何解决这个问题吗?
谢谢
def row_col_xyz_to_ply(self, xyz, rgb, name="output"):
"""Convers a numpy (row, col, xyz) cloud of points to ply format
Parameters:
xyz (NDArray): 3D points for each image pixel (row, col, (x,y,z))
rbg (NDArray): RGBA values for each image pixel (row, col, (r,g,b,a))
Returns:
None: save the .ply file on the disk instead
"""
# reshape
# Extract the coordinates of the points where there is actual values (not NaN) in the xyz cloud of points
points_rows, points_cols = np.where(~np.isnan(xyz[:,:,0]))
# Grab the corresponding points in the xyz cloud of points in an array
points_xyz = xyz[points_rows,points_cols,:] # n*3 array of 3D points (after nan filtering)
# Grab the corresponding points in the image in an array
points_image = rgb[points_rows,points_cols,0:3] # n*3 array of RGB points (after nan filtering)
# Create a dict of data
data =
'x': points_xyz[:,0],
'y': points_xyz[:,1],
'z': points_xyz[:,2],
'red': points_image[:,0],
'green': points_image[:,1],
'blue': points_image[:,2]
# Convert it to a cloud of points
cloud = PyntCloud(pd.DataFrame(data=data))
# Path where to save it
filename = f"name.ply"
path = os.path.join(self.path_exports,filename)
# Save it
cloud.to_file(path)
# Debug
print("row_col_xyz_to_ply > saved: ",filename)
【问题讨论】:
【参考方案1】:问题出在搅拌机 .ply 导入器中。它不支持任何三角形未使用的点。
【讨论】:
以上是关于通过 .ply 格式将 3D 点导出到 Blender 会创建一个空对象,而它在 MeshLab 中工作的主要内容,如果未能解决你的问题,请参考以下文章