pcd格式点云转bin格式点云

该文章介绍了一种基于Python的方法,通过pypcd库将PCD格式的点云数据转换为BIN格式,便于在如CloudCompare等软件中进行可视化。脚本读取指定路径下的PCD文件,然后将转换后的BIN文件保存到目标路径,并对转换过程进行了详细说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.前言

pcd格式点云比较有利于用cloudcompare等软件打开进行可视化,但许多算法只支持bin格式的点云输入,有时候得将pcd转为bin格式点云。

2.方法

基于python进行格式转化,将pcd路径和输出的bin路径分别写入即可

import numpy as np
import os
import argparse
from pypcd import pypcd
import tqdm

def main():
    parser = argparse.ArgumentParser(description="Convert .pcd to .bin")
    #pcd文件路径
    parser.add_argument(
        "--pcd_path",
        type=str,
        default="存放pcd文件的路径"
    )
    #bin格式输出路径
    parser.add_argument(
        "--bin_path",
        type=str,
        default="存放bin文件的路径"
    )
    parser.add_argument(
        "--file_name",
        help="File name.",
        type=str,
        default="file_name"
    )
    args = parser.parse_args()
    pcd_files = []
    for (path, dir, files) in os.walk(args.pcd_path):
        for filename in files:
            # print(filename)
            ext = os.path.splitext(filename)[-1]
            if ext == '.pcd':
                pcd_files.append(path + "/" + filename)
    pcd_files.sort()   
    try:
        if not (os.path.isdir(args.bin_path)):
            os.makedirs(os.path.join(args.bin_path))
    except OSError as e:
        if e.errno != errno.EEXIST:
            raise
    seq = 0
    for pcd_file in tqdm(pcd_files):
        pc = pypcd.PointCloud.from_path(pcd_file)
        bin_file_name = "{}_{:05d}.bin".format(args.file_name, seq)
        bin_file_path = os.path.join(args.bin_path, bin_file_name)
        np_x = (np.array(pc.pc_data['x'], dtype=np.float16)).astype(np.float16)
        np_y = (np.array(pc.pc_data['y'], dtype=np.float16)).astype(np.float16)
        np_z = (np.array(pc.pc_data['z'], dtype=np.float16)).astype(np.float16)
        np_i = (np.array(pc.pc_data['intensity'], dtype=np.float32)).astype(np.float16)/256   
        points_32 = np.transpose(np.vstack((np_x, np_y, np_z, np_i)))                              
        points_32.tofile(bin_file_path)
        meta_file.writerow(
            [os.path.split(pcd_file)[-1], bin_file_name]
        )
        seq = seq + 1
    
if __name__ == "__main__":
    main()

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值