python+cloudcompare 批量为点云增加曲率和粗糙度通道

数据展示:

将点云转换从kitti格式转换到pcd格式(目的是为了让CloudCompare方便读入)

批量转换脚本kitti2pcd.py

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

def bin_to_pcd(binFileName):
    size_float = 4
    list_pcd = []
    with open(binFileName, "rb") as f:
        byte = f.read(size_float * 4)
        while byte:
            x, y, z, intensity = struct.unpack("ffff", byte)
            list_pcd.append([x, y, z])
            byte = f.read(size_float * 4)
    np_pcd = np.asarray(list_pcd)
    pcd = o3d.geometry.PointCloud()
    pcd.points = o3d.utility.Vector3dVector(np_pcd)
    return pcd

def convert_single(binFileName, pcdFileName):
    pcd = bin_to_pcd(binFileName)
    o3d.io.write_point_cloud(pcdFileName, pcd)

def convert(binFileFolder,pcdFileFolder):
    for root,dirs,files in os.walk(binFileFolder):
        for file_ in files:
            binFileName = os.path.join(root,file_)
            pcdFileName = os.path.join(pcdFileFolder,file_.replace("bin","pcd"))
            convert_single(binFileName,pcdFileName)
            
if __name__ == "__main__":
    fire.Fire()

具体使用方法,指定好目标路径和存储路径,脚本走起

python kitti2pcd.py convert D:\\velodyne D:\\velodyne_pcd

使用cloudcompare commandline 与 python脚本 从当前的工具中创建新的标量域(生成txt数据)

将上一步转换好的点云取一个放到cloudcompare中,确定下计算曲率和粗糙度的参数
使用这条命令进行高斯曲率和粗糙度的生成

CloudCompare.exe -SILENT -AUTO_SAVE OFF -O D:\\velodyne_pcd\\000001.pcd -ROUGH 6.0 -CURV GAUSS 6.0 -C_EXPORT_FMT PCD -SAVE_CLOUDS FILE "D:\\velodyne_pcd\\dst\\000001.pcd"

批量进行转换的脚本batch_convert.py

import os
import subprocess
import fire
def singleprocess(srcfile,dstfile):
    command_line = "CloudCompare.exe -SILENT -AUTO_SAVE OFF -O " + srcfile + " -ROUGH 20.0 -CURV GAUSS 20.0 -C_EXPORT_FMT ASC -SAVE_CLOUDS FILE " + dstfile.replace("pcd",'txt')
    process = subprocess.Popen(command_line)
    process.wait()
 
    print(srcfile,'done')
def convert(srcfilefolder, dstfilefolder):
    for root,dirs,files in os.walk(srcfilefolder):
        for file_ in files:
            srcFileName = os.path.join(root,file_)
            dstFileName = os.path.join(dstfilefolder,file_)
            singleprocess(srcFileName,dstFileName)
if __name__ == "__main__":
    fire.Fire()

批量转换脚本走起

python batch_convert.py convert d:\\velodyne_pcd d:\\velodyne_dst
在这里插入图片描述

将生成的数据转换到kitti格式(转换成原来的格式,方便进行后续例如深度学习的处理)

脚本名字 ascii2bin.py

import os
import numpy as np
dst_folder = "d:\\velodyne_c_r" 
src_folder = "d:\\velodyne_dst"
for root,dirs,files in os.walk(src_folder):
    for f in files:
        if 'pcd' in f:
            continue
        # load into numpy array
        a_f = os.path.join(src_folder,f)
        d_f = os.path.join(dst_folder,f.replace('.txt','.pcd'))
        file_data = np.loadtxt(a_f,dtype=np.float32 ,encoding='latin-1')
        # save to target file
        file_data.reshape(-1,5).astype(np.float32)
        file_data.tofile(d_f)
        print(f,"done")

        

脚本走起

python ascii2bin.py
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值