基于python的ply格式点云数据处理(学习笔记)

您所在的位置:网站首页 510仿真器 基于python的ply格式点云数据处理(学习笔记)

基于python的ply格式点云数据处理(学习笔记)

#基于python的ply格式点云数据处理(学习笔记)| 来源: 网络整理| 查看: 265

出于科研需求,要处理点云数据,自己零基础从头摸索真的太难了。 写点笔记方便自己回头查阅,公开是因为想小白少走弯路。

基于python的ply格式点云数据处理(学习笔记,持续更新) 入门open3D库的使用与介绍pyntcloud库的使用与介绍点云数据处理相关的博客推荐安装python的库ply格式介绍 点云数据的读取ply格式点云数据读取使用pyntcloud库的 PyntCloud.from_file() 函数使用open3d库的 io.read_point_cloud() 函数 点云可视化使用open3D库的 o3d.utility.Vector3dVector() 函数点云可视化并设置颜色 点云数据的拼接读取并拼接点云数据(增加block_id和unit_id列)

入门 open3D库的使用与介绍 官方文档(英文) http://www.open3d.org/docs/release/ csdn 梦醒Blue 的博客(中文) https://blog.csdn.net/io569417668/category_10028098.html?spm=1001.2014.3001.5482 pyntcloud库的使用与介绍 https://github.com/daavoo/pyntcloud 点云数据处理相关的博客推荐 点云侠(CSDN) https://blog.csdn.net/qq_36686437?type=blog 安装python的库

此处示例pyntcloud,目前只有它符合我的需求

conda install pyntcloud -c conda-forge #或者 pip install pyntcloud ply格式介绍

我的工作以处理ply点云数据为主

http://paulbourke.net/dataformats/ply/ 点云数据的读取 ply格式点云数据读取 使用pyntcloud库的 PyntCloud.from_file() 函数 https://github.com/daavoo/pyntcloud from pyntcloud import PyntCloud path = r"C:\Users\Dell\Desktop\PC_test\data\1_20220807T01_transform_M.ply" pc = PyntCloud.from_file(path) print(pc) print(pc.shape) print(pc.points.dtypes) 使用open3d库的 io.read_point_cloud() 函数 import open3d as o3d import numpy as np path = r"C:\Users\Dell\Desktop\PC_test\data\1_20220807T01_transform_M.ply" pcd = o3d.io.read_point_cloud("path") arr = np.asarray(pcd.points) # 转数组格式 print(arr.shape) print(arr) print(np.asarray(pcd.colors)) o3d.visualization.draw_geometries([pcd]) # 点云可视化,注意加上中括号 点云可视化 使用open3D库的 o3d.utility.Vector3dVector() 函数 import open3d as o3d import numpy as np path = r"C:\Users\Dell\Desktop\PC_test\data\1_20220807T01_transform_M.ply" pcd = o3d.io.read_point_cloud("path") o3d.visualization.draw_geometries([pcd]) # 点云可视化,注意加上中括号 点云可视化并设置颜色 # 说明: # 以下代码是个人数据处理备份,不适合别人。 # 目的: # 对部分点云区分色彩的可视化,方便查看处理区域。 # ======================================= import open3d as o3d import numpy as np from pyntcloud import PyntCloud # 读取ply数据 path = r"C:\Users\Dell\Desktop\PC_test\data\1_20220807T01_transform_M.ply" pc = PyntCloud.from_file(path) # 可视化 # 创建空的PointCloud格式文件, 用于点云可视化 pcd_new = o3d.geometry.PointCloud() # 将(n,3)数组转成open3d格式 pcd_new.points = o3d.utility.Vector3dVector(pc.points.values[:,0:3]) # 将每个点设置为统一的颜色 # pcd_new.paint_uniform_color([0.5,0.5,0.5]) # 将部分点云附上指定颜色(通过数组切片的方法) # index = np.where(pc_sp.unit_id == 1) # np.asarray(pcd_new.colors)[index, :] = [1,0,0] # 将每个小区附上一种颜色 # colors = np.random.randint(255, size=(221,3))/255. # 生成221种随机色彩 # colors = colors[pcd.points['unit']] # 将生成的221种色彩按照小区分类生成与点云数量对应的数量 # pcd_new.colors = o3d.utility.Vector3dVector(colors) # 着色 # 将点云附上真值(前提是点云文件有RGB) pcd_new.colors = o3d.utility.Vector3dVector(pc.points.values[:,6:9]/255.) o3d.visualization.draw_geometries([pcd_new]) # 可视化 点云数据的拼接 读取并拼接点云数据(增加block_id和unit_id列) # 说明: # 以下代码是个人数据处理备份,不适合别人。 # 目的: # 1. 循环读取文件夹中所有ply格式点云数据(22个)。 # 2. 根据名称为每个block名称添加的字段(block_id和unit_id)。 # 3. 将22个block拼接在一起。 # 3.1. 基本算法是:根据每个bolck的编号按照实际排列情况(实验设计),先调整每个block的xy坐标(简单的加法),再拼接(数据框合并) # ========================================== # 读取并拼接点云数据(增加block_id和unit_id列) path = 'H:\\F\work_RuGao_WYL_2022\\PointCloud\\data\\planteye\\data_unzip_t\\2022-0807-09\\' file_path = glob.glob(os.path.join(path, "*.ply")) # 读取绝对路径 pc_sp = pd.DataFrame() # 创建空DataFrame用来存储for循环所有处理过的点云数据 for path_i in file_path: pc = PyntCloud.from_file(path_i) # 打开点云数据 pc_df = pd.DataFrame(pc.points, copy=True) # 读取对象文件的点云数据,格式为DataFrame,并复制 # 增加一列block_id(非连续的,没有3的倍数) file_name = os.path.basename(path_i) # 提取绝对路径的文件名(带后缀) block = np.uint8(file_name.zfill(34)[0:2]) # 提取文件名的前两个字符(为block号), .zfill()是为了将长度不等的文件名在左侧用0补全,uint8(0~255) pc_df["block_id"] = block # 给pc_df数据框添加新的列, 表示block的编号 pc_df["unit_id"] = np.uint8(0) # 这列原本就有,只是全都等于-1,这里修改为np.uint8(0),后面会修改为有意义的真值 # 增加一列unit_id,并赋真值 (原来就有这个字段,全是-1) for unit in range(1,11): pc_df.loc[(pc_df.y>=250+850*(unit-1)) & (pc_df.y


【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3