.off turn .ply (python)

1. Read .off of N . 3 point clouds and M C network surface

def read_off(filename):
    points = []
    faces = []
    with open(filename, 'r') as f:
        first = f.readline()
        if (len(first) > 4):  # Too handle error in .off like OFF492 312 0
            n, m, c = first[3:].split(' ')[:]
        else:
            n, m, c = f.readline().rstrip().split(' ')[:]
        n = int(n)
        m = int(m)
        for i in range(n):
            value = f.readline().rstrip().split(' ')
            points.append([float(x) for x in value])
        for i in range(m):
            value = f.readline().rstrip().split(' ')
            faces.append([int(x) for x in value])
    points = np.array(points)
    faces = np.array(faces)
    return points, faces

2. N * 3 ply file writing point clouds

def export_ply(pc, filename):
    vertex = np.zeros(pc.shape[0], dtype=[('x', 'f4'), ('y', 'f4'), ('z', 'f4')])
    for i in range(pc.shape[0]):
        vertex[i] = (pc[i][0], pc[i][1], pc[i][2])
    ply_out = PlyData([PlyElement.describe(vertex, 'vertex', comments=['vertices'])])
    ply_filename = filename[:-4] + '.ply'
    ply_out.write(ply_filename)

#Convert ModelNet from .off to .ply
def write_ply_points_only_from_off():
    for i in range(len(cat)):
        if not os.path.exists(os.path.join(ply_dir,cat[i],'train')):
            os.makedirs(os.path.join(ply_dir,cat[i],'train'))
        if not os.path.exists(os.path.join(ply_dir,cat[i],'test')):
            os.makedirs(os.path.join(ply_dir,cat[i],'test'))
    for i in range(len(cat)):
        print('writing ', cat[i])
        filenames = os.listdir(os.path.join(root_dir, cat[i],'train'))
        for j,x in enumerate(filenames):
            filename = os.path.join(root_dir, cat[i], 'train', x)
            out = os.path.join(ply_dir, cat[i], 'train', x)
            points, faces = read_off(filename)
            export_ply(points,out)
        filenames = os.listdir(os.path.join(root_dir, cat[i],'test'))
        for j,x in enumerate(filenames):
            filename = os.path.join(root_dir, cat[i], 'test', x)
            out = os.path.join(ply_dir, cat[i], 'test', x)
            points, faces = read_off(filename)
            export_ply(points,out)
if __name__ == '__main__':
    write_ply_from_off()

N 3. . 3 point clouds and M C grid plane (first parameter is the number of points, the latter parameter is c-1 coordinate points)

def export_ply_points_faces(pc,fc,filename):
    vertex = np.zeros(pc.shape[0], dtype=[('x', 'f4'), ('y', 'f4'), ('z', 'f4')])
    face = np.zeros(fc.shape[0],dtype=[('vertex_indices', 'i4', (3,))])
    for i in range(pc.shape[0]):
        vertex[i] = (pc[i][0], pc[i][1], pc[i][2])
    for i in range(face.shape[0]):
        face[i][0] = fc[i,1:]
    ply_out = PlyData([PlyElement.describe(vertex, 'vertex',comments=['vertices']),
                        PlyElement.describe(face, 'face', comments=['faces'])])

    ply_filename = filename[:-4] + '.ply'
    ply_out.write(ply_filename)

#Convert ModelNet from .off to .ply
def write_ply_points_faces_from_off():
    for i in range(len(cat)):
        if not os.path.exists(os.path.join(ply_dir,cat[i],'train')):
            os.makedirs(os.path.join(ply_dir,cat[i],'train'))
        if not os.path.exists(os.path.join(ply_dir,cat[i],'test')):
            os.makedirs(os.path.join(ply_dir,cat[i],'test'))
    for i in range(len(cat)):
        print('writing ', cat[i])
        filenames = os.listdir(os.path.join(root_dir, cat[i],'train'))
        for j,x in enumerate(filenames):
            filename = os.path.join(root_dir, cat[i], 'train', x)
            out = os.path.join(ply_dir, cat[i], 'train', x)
            points, faces = read_off(filename)
            export_ply_points_faces(points,faces,out)
        filenames = os.listdir(os.path.join(root_dir, cat[i],'test'))
        for j,x in enumerate(filenames):
            filename = os.path.join(root_dir, cat[i], 'test', x)
            out = os.path.join(ply_dir, cat[i], 'test', x)
            points, faces = read_off(filename)
            export_ply_points_faces(points,faces,out)
if __name__ == '__main__':
    write_ply_points_faces_from_off()

4. Effects





Guess you like

Origin www.cnblogs.com/simingfan/p/11782677.html