基于python实现点云数据格式的转换(csv转bin,csv转pcd)

  • csv转bin
import numpy as np
import os
import pandas as pd


def pointsTobin(input, output):
    data = pd.read_csv(input, encoding='utf-8')  # 读取csv文件
    data_234 = data.iloc[:, 0:3]  # 这里做的是切割,因为我这里只用到了其收集数据的第1列到第三列,即x,y,z 可根据自身需要设置
    np_x = (np.array(data_234['x'], dtype=np.float32)).astype(np.float32)
    np_y = (np.array(data_234['y'], dtype=np.float32)).astype(np.float32)
    np_z = (np.array(data_234['z'], dtype=np.float32)).astype(np.float32)
    np_i = np.zeros(shape=(np_z.size), dtype=np.float32).astype(np.float32)
    points_32 = np.transpose(np.vstack((np_x, np_y, np_z, np_i)))
    points_32.tofile(output)

path = "output"
data_paths = os.listdir(path)
for data_path in data_paths:
    out_path = "binfolder/" + data_path.replace('.csv', '.bin')
    data_path = os.path.join(path, data_path)
    print(data_path)
    pointsTobin(data_path, out_path)
  • csv转pcd
import os
import numpy as np
import pandas as pd


def pointsTopcd(input, output):
    data = pd.read_csv(input, encoding='utf-8')  # 读取csv文件
    data_234 = data.iloc[:, 0:3]  
    data_234 = np.array(data_234)  
    points = data_234
  
    PCD_FILE_PATH = output
    if os.path.exists(PCD_FILE_PATH):
        os.remove(PCD_FILE_PATH)

    handle = open(PCD_FILE_PATH, 'a')

    # 得到点云点数
    point_num = len(data)

    # pcd头部
    handle.write(
        '# .PCD v0.7 - Point Cloud Data file format\nVERSION 0.7\nFIELDS x y z\nSIZE 4 4 4\nTYPE F F F\nCOUNT 1 1 1')
    string = '\nWIDTH ' + str(point_num)
    handle.write(string)
    handle.write('\nHEIGHT 1\nVIEWPOINT 0 0 0 1 0 0 0')
    string = '\nPOINTS ' + str(point_num)
    handle.write(string)
    handle.write('\nDATA ascii')

    # 依次写入点
    for i in range(point_num):  # 这里我只用到了前三列,故只需展示0,1,2三列 读者可根据自身需要写入其余列
        string = '\n' + str(points[i, 0]) + ' ' + str(points[i, 1]) + ' ' + str(points[i, 2])
        handle.write(string)
    handle.close()


path = "output"
data_paths = os.listdir(path)
for data_path in data_paths:
    out_path = "pcdfolder/" + data_path.replace('.csv', '.pcd')
    data_path = os.path.join(path, data_path)
    print(data_path)
    pointsTopcd(data_path, out_path)
Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐