点云数据中bin到pcd格式转换的python实现

import os
import struct
import numpy as np
import open3d as o3d


def bin2pcd(in_file, out_file):
    points = []

    with open(in_file, 'rb') as f:
        while True:
            data = f.read(3 * 4 + 4)  # Assuming 3 floats for XYZ and 1 float for intensity
            if not data:
                break

            values = struct.unpack('fff f', data)
            point = [values[0], values[1], values[2], values[3]]
            points.append(point)

    # Convert to numpy array
    points_array = np.array(points, dtype=np.float32)

    # Create Open3D PointCloud
    pc = o3d.geometry.PointCloud()
    pc.points = o3d.utility.Vector3dVector(points_array[:, :3])
    pc.colors = o3d.utility.Vector3dVector(np.full((len(points_array), 3), 255.0))  # White color for simplicity

    # Save to PCD file
    o3d.io.write_point_cloud(out_file, pc)
    

def batch_bin2pcd(input_dir, output_dir):
    # Create output directory if it doesn't exist
    if not os.path.exists(output_dir):
        os.makedirs(output_dir)

    # Get a list of all bin files in the input directory
    bin_files = [f for f in os.listdir(input_dir) if f.endswith('.bin')]

    for bin_file in bin_files:
        bin_path = os.path.join(input_dir, bin_file)
        pcd_file = os.path.join(output_dir, os.path.splitext(bin_file)[0] + '.pcd')
        bin2pcd(bin_path, pcd_file)

# Example usage
input_directory = 'D:\\Lidar_data\\data_bin'
output_directory = 'D:\\Lidar_data\\data_pcd'

batch_bin2pcd(input_directory, output_directory)
print("转换完成!")

使用时只需要修改最后的输入目录和输出目录即可,其他内容不需要改变

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值