python读取.ply文件, 并转换成np.array

PLY文件格式是Stanford大学开发的一套三维mesh模型数据格式。可以存放顶点,面片,或其他的一种或者多种。举例读取一种简单的,只包含了顶点数据。数据格式如下所示。

.ply文件格式

ply
format binary_little_endian 1.0
comment Created by CloudCompare v2.10.2 (Zephyrus)
comment Created 2020-03-22 7:43 PM
obj_info Generated by CloudCompare!
element vertex 5  # 顶点的数量
property double x  # property是每个顶点的通道信息,包括数据类型和标识符,这里有10个通道信息,x,y,z,...,scalar_Label
property double y
property double z
property uchar red
property uchar green
property uchar blue
property float scalar_Intensity
property float scalar_GPSTime
property float scalar_ScanAngleIndex
property float scalar_Label
end_header

627414.17199707 4842862.20397949 147.42399597 255 255 255  1. 324780.03  15. 1.

627414.1289978  4842862.21398926 147.42300415 255 255 255  1. 324780.12  13. 1.

627414.11399841 4842862.00500488 147.49000549 255 255 255  1. 324780.25  11. 1.

627414.19299316 4842861.9630127  147.43099976 255 255 255  1. 324780.3    9. 1.

627414.16799927 4842862.09997559 147.43699646 255 255 255  1. 324780.6    1. 1.

写本教程的原因是ply文件的各个property的数据类型不一定相同,如果想转换成数据类型(如float)的array进行处理,不能直接转换。

安装依赖:

1.新建一个库名称的文件。

requirements.txt

pandas
numpy
ply
2.安装
pip install -r requirements.txt

读取.ply文件的数据,储存在float类型的np.array中

import os
from plyfile import PlyData, PlyElement
import numpy as np
import pandas as pd

file_dir = '文件的路径'  #文件的路径
plydata = PlyData.read(file_dir)  # 读取文件
data = plydata.elements[0].data  # 读取数据
data_pd = pd.DataFrame(data)  # 转换成DataFrame, 因为DataFrame可以解析结构化的数据
data_np = np.zeros(data_pd.shape, dtype=np.float)  # 初始化储存数据的array
property_names = data[0].dtype.names  # 读取property的名字
for i, name in enumerate(property_names):  # 按property读取数据,这样可以保证读出的数据是同样的数据类型。
    data_np[:, i] = data_pd[name]
print(data_np)

这样数据就保存在data_np中了,类型为float。这样便于各种数据处理。

你可能感兴趣的:(python读取.ply文件, 并转换成np.array)