【Open3D】第一篇:点云的基本操作(法向估计、kdtree搜索等)

参考网址

网址1

读取点云

cloud=o3d.io.read_point_cloud(args.ipath)	# 读取点云
cloud_xyz=np.asarray(cloud.points) 			# 获取点云坐标数据
num_of_pts=len(cloud_xyz)					# 获取点个数

创建和保存点云

pcd = o3d.geometry.PointCloud()
pcd.points = o3d.utility.Vector3dVector(xyz)
o3d.io.write_point_cloud("../../TestData/sync.ply", pcd)

kdtree搜索

import open3d as o3d
import numpy as np

pcd = o3d.io.read_point_cloud("chair.pcd")
# 建立KD树
pcd_tree = o3d.geometry.KDTreeFlann(pcd)
# 使用K近邻,将第1500个点最近的100个点设置为蓝色
k = 100  # 设置K的大小
[nn_k, idx_k, _] = pcd_tree.search_knn_vector_3d(pcd.points[1500], k)  # 返回邻域点的个数和索引

法向估计

import open3d as o3d

# Load your point cloud (assuming it's in a file called 'point_cloud.ply')
icloud = o3d.io.read_point_cloud("point_cloud.ply")

# Estimate normals using the k-nearest neighbors method
k = 30  # Specify the number of neighbors you want to use
icloud.estimate_normals(search_param=o3d.geometry.KDTreeSearchParamKNN(knn=k))

# Save the point cloud with normals
o3d.io.write_point_cloud("point_cloud_with_normals.ply", icloud)

绘制

绘制三角片

import open3d
import numpy as np
mesh = open3d.geometry.TriangleMesh()
np_vertices = np.array([[2, 2, 0],
                        [5, 2, 0],
                        [5, 5, 0]])
np_triangles = np.array([[0, 1, 2]]).astype(np.int32)
mesh.vertices = open3d.utility.Vector3dVector(np_vertices)
mesh.triangles = open3d.utility.Vector3iVector(np_triangles)
open3d.visualization.draw_geometries([mesh])

绘制两个物体

import open3d as o3d
import numpy as np
cloud=o3d.io.read_point_cloud("/home/i9/experiment_nc/church.ply")
cloud_xyz=np.asarray(cloud.points)

print("Let's draw a cubic using o3d.geometry.LineSet.")
points = [
    [0, 0, 0],
    [1, 0, 0],
    [0, 1, 0],
    [1, 1, 0],
    [0, 0, 1],
    [1, 0, 1],
    [0, 1, 1],
    [1, 1, 1],
]
lines = [
    [0, 1],
    [0, 2],
    [1, 3],
    [2, 3],
    [4, 5],
    [4, 6],
    [5, 7],
    [6, 7],
    [0, 4],
    [1, 5],
    [2, 6],
    [3, 7],
]
colors = [[1, 0, 0] for i in range(len(lines))]
object = o3d.geometry.LineSet(
    points=o3d.utility.Vector3dVector(points),
    lines=o3d.utility.Vector2iVector(lines),
)

# o3d.geometry
object.colors = o3d.utility.Vector3dVector(colors)
o3d.visualization.draw_geometries([object, cloud])
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

敲出十四行诗的幸运猴子

谢谢!

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

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

打赏作者

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

抵扣说明:

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

余额充值