open3d常用处理

pointcloud

open3d点云坐标表示为Vector3dVector

io

从文件读写点云

pcd = o3d.io.read_point_cloud(filename="./pcd_example.ply")
o3d.io.write_point_cloud(filename="./pcd_example1.ply", pointcloud=pcd)

http://www.open3d.org/docs/release/python_api/open3d.io.read_point_cloud.html#open3d-io-read-point-cloud
http://www.open3d.org/docs/release/python_api/open3d.io.write_point_cloud.html

点云平移

import numpy as np
import copy
pcd.paint_uniform_color([1,0,0])
trans_matx=np.eye(4)
# 沿x轴平移50
trans_matx[0][3]=50
pcd_move_x = copy.deepcopy(pcd)
pcd_move_x .transform(trans_matx)
pcd_move_x.paint_uniform_color([0, 1, 0])
o3d.visualization.draw_geometries([pcd,pcd_move_x],
                                  window_name='open3d',
                                  width=960, height=900, left=960, top=100)

visualization

点云上色

# red[1,0,0],green[0,1,0],blue[0,0,1]
pcd.paint_uniform_color([1,0,0])

http://www.open3d.org/docs/release/python_api/open3d.geometry.PointCloud.html#open3d.geometry.PointCloud.paint_uniform_color
可视化
假设有两个点云:pcd1 pcd2要显示

o3d.visualization.draw_geometries([pcd1,pcd2],
                                  window_name='open3d',
                                  width=960, height=900, left=960, top=100)                              

http://www.open3d.org/docs/release/python_api/open3d.visualization.draw_geometries.html#open3d.visualization.draw_geometries

点云部分上色

# 先将点云colors转成npy(首先要保证点云是有颜色信息的)
color_npy = np.array(pcd_plane.colors)
# 将部分点的颜色改变,idx_点的索引
color_npy[idx_] = [1, 1, 0]
pcd_plane.colors = o3d.utility.Vector3dVector(color_npy)

点云平面分割

open3d demo:
http://www.open3d.org/docs/release/tutorial/geometry/pointcloud.html#Plane-segmentation
distance_threshold是阈值,在此阈值之内的点才是平面点
ransac_n是ransac算法选点的个数,3个点就能确定一个平面,ransac_n越大,拟合的平面就越严格
num_iterations是ransac迭代次数
coefficients是4x1的平面系数
plane_idx是平面点的索引,用于筛选出平面点
想搞明白的话看看open3d的源码以及ransac算法
open3d source code for plane segment :
https://github.com/isl-org/Open3D/blob/master/cpp/open3d/geometry/PointCloudSegmentation.cpp#L135

pcd.paint_uniform_color([1,0,0])
coefficients, plane_idx = pcd.segment_plane(distance_threshold=0.2, ransac_n=10, num_iterations=500)
color_npy = np.array(pcd.colors)
# 将平面部分单独上色
color_npy[plane_idx ] = [1, 1, 0]
pcd_plane.colors = o3d.utility.Vector3dVector(color_npy)
o3d.visualization.draw_geometries([pcd],
                                  window_name='open3d',
                                  width=960, height=900, left=960, top=100) 
# 也可将平面点云单独提取                                  
pcd_plane=pcd.select_by_index(plane_idx)

--------------------------------------------------------------------------------------------诺有缸的高飞鸟202111

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

诺有缸的高飞鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值