news 2026/4/16 16:02:45

3D点云处理(open3D)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
3D点云处理(open3D)

点云的应用

点云(Point Cloud)就是一堆带 3D 坐标的点集合,本质是三维世界的数字化表达

  • 配准→ 把多帧点云拼成完整环境
  • 分割→ 把环境分成不同东西
  • 检测→ 找到感兴趣目标(车、人)
  • 补全→ 让残缺物体变完整,方便识别 / 抓取

点云数据

  • 无序性:只是点,排列顺序不影响
  • 近密远疏:扫描与视角不同导致
  • 非结构化数据,直接CNN有点难
  • 要解决的任务就是如何对点云数据进行特征提取

open3D的IO与数据转换

open3D点云的读取和保存

import open3d as o3d # 读取点云 pcd = o3d.io.read_point_cloud("./data/coalYard.pcd") o3d.visualization.draw_geometries([pcd]) # 保存 o3d.io.write_point_cloud("./data/copy_coalYard.pcd", pcd)

open3D中rgbd的读取

colar_raw=o3d.io.read_image("./data/00000.jpg") depth_raw=o3d.io.read_image("./data/00000.png") rgbd_iamge=o3d.geometry.RGBDImage.create_from_color_and_depth(colar_raw,depth_raw) plt.subplot(1,2,1) plt.title("color") plt.imshow(rgbd_iamge.color) plt.subplot(1,2,2) plt.title("depth") plt.imshow(rgbd_iamge.depth) plt.show() pcd=o3d.geometry.PointCloud.create_from_rgbd_image(rgbd_iamge,o3d.camera.PinholeCameraIntrinsic(o3d.camera.PinholeCameraIntrinsicParameters.PrimeSenseDefault)) pcd.transform([[1,0,0,0],[0,-1,0,0],[0,0,-1,0],[0,0,0,-1]]) o3d.visualization.draw_geometries([pcd])

open3D中mesh的读取和保存

plymesh=o3d.io.read_triangle_mesh("./data/bunny10k.ply") o3d.visualization.draw_geometries([plymesh]) o3d.io.write_triangle_mesh("./data/copy_bunny10k.ply",plymesh)

简单可视化

o3d.visualization.draw_geometries(geometry_list,window_name='Open3D',width=1920,height=1080,left=50,top=50,point_show_normal=False)

  • geometry_list:带显示的所有实体组成的列表[1,1]
  • window_name:待显示窗体的名字
  • width:窗体的宽度
  • height:窗体高度
  • left:窗体左边缘的宽度
  • top:窗体上边缘的宽度
  • point_show_normal:是否显示法向量

paint_uniform_color([0,0,1]):设置点云颜色

ply=o3d.io.read_point_cloud("./data/tree.ply") ply.paint_uniform_color([1,0,1]) o3d.visualization.draw_geometries([ply])

设置索引点颜色

ply=o3d.io.read_point_cloud("./data/tree.ply") ply.paint_uniform_color([0,0,1]) #将点云颜色数据转化为numpy类型 color=np.array(ply.colors) #获取需要修改颜色的索引 inlier=[i for i in range(0,color.shape[0]) if i%2==0] color[inlier]=[1,0,0] #再将颜色转回原来的类型 ply.colors=o3d.utility.Vector3dVector(color[:,:]) o3d.visualization.draw_geometries([ply])

可视化法线

ply=o3d.io.read_point_cloud("./data/tree.ply") ply.paint_uniform_color([0,0,1]) #计算法线,搜索半径0.01m,只考虑领域内的30个点 ply.estimate_normals(search_param=o3d.geometry.KDTreeSearchParamHybrid(radius=0.01,max_nn=30)) o3d.visualization.draw_geometries([ply],point_show_normal=True)

隐藏点移除

hidden_point_removal(camera_location,radius)

pcd=o3d.io.read_point_cloud("./data/building.ply") # o3d.visualization.draw_geometries([pcd]) _,pt_map=pcd.hidden_point_removal([0,0,0.25],25) pcd=pcd.select_by_index(pt_map) o3d.visualization.draw_geometries([pcd])

pcd=o3d.io.read_point_cloud("./data/building.ply") # o3d.visualization.draw_geometries([pcd]) _,pt_map=pcd.hidden_point_removal([0,0,0.25],25) pcd=pcd.select_by_index(pt_map,invert=True) o3d.visualization.draw_geometries([pcd])

其他(坐标系,点云大小)

pcd=o3d.io.read_point_cloud("./data/bunny.pcd") #可视化句柄 viewer=o3d.visualization.Visualizer() viewer.create
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 16:02:08

GitLab 异机迁移实战指南:从备份、还原到 PostgreSQL 报错全解决

⚠️ 核心警告:在进行异机迁移时,源服务器与目标服务器的 GitLab 版本必须完全一致(例如同为 15.4.2-ce.0)。跨大版本恢复会导致数据结构不兼容,甚至恢复失败。如需升级,请遵循“先备份 -> 升级旧机 -> 验证 -> 迁移到新机”的策略。 一、 旧服务器:全量数据备…

作者头像 李华
网站建设 2026/4/16 16:01:06

平衡三进制运算基础库

1、前言 从最开始的研究平衡三进制这东西,好像是过了几年了,它的逻辑门说实话巧妙是巧妙的,但是有时候复杂也是复杂的,为了更加方便的研究它,我用Rust语言来写了一个基础库,现在它终于有了质的突破&#xf…

作者头像 李华
网站建设 2026/4/16 16:00:15

OBS Multi RTMP:免费开源的终极多平台直播解决方案指南

OBS Multi RTMP:免费开源的终极多平台直播解决方案指南 【免费下载链接】obs-multi-rtmp OBS複数サイト同時配信プラグイン 项目地址: https://gitcode.com/gh_mirrors/ob/obs-multi-rtmp 想要同时向多个平台直播,却厌倦了重复繁琐的设置流程&…

作者头像 李华