一.安装pip3 install open3d
注:报错解决 Could not find a version that satisfies the requirement torch==1.4.0
解决办法 :cmd下载: pip install open3d -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
二.应用
1.多角度点云拼接在一起生成整个点云
bunny10k.ply
import open3d as o3d
import numpy as np
print("Open3D read Point Cloud")
pcd=o3d.io.read_point_cloud(r"C:\Users\86159\Desktop\python\class9\bunny\data\bunny10k.ply")#替换为自己的兔兔的路径#
print(pcd)
o3d.visualization.draw_geometries([pcd],width=800,height=600)
结果:
2.
Open3d的近邻搜索
贴着表面去找 可以做到降噪
import open3d as o3d import numpy as np print("Open3D read Point Cloud") pcd = o3d.io.read_point_cloud(r"C:\Users\86159\Desktop\python\class9\bunny\data\bunny10k.ply") pcd.paint_uniform_color([0.5, 0.5, 0.5])#颜色可以设置为灰色# pcd_tree = o3d.geometry.KDTreeFlann(pcd)#open3d里最重要的几何一套 贴着近邻平面去找# pcd.colors[100] = [1, 0, 0]#把第100个点色彩设置为红# [k, idx, _] = pcd_tree.search_knn_vector_3d(pcd.points[100],100)#以点源数据的第100个点找数据# np.asarray(pcd.colors)[idx[1:], :] = [0, 1, 0]#返回找到的点的坐标,把周围100个点色彩设置成绿色# o3d.visualization.draw_geometries([pcd],width=1200,height=1000)#实现三维空间的可视化#
3.
基于半径的索引
给一个点,这是检索的半径的范围(距离)是多少
[k,idx,_] = pcd_tree.search_radius_vector_3d(pcd.points[3000],0.1)#索引半径小于0.02
np.asarray(pcd.colors)[idx[1:], :] = [0, 0, 1]
import open3d as o3d
import numpy as np
print("Open3D read Point Cloud")
pcd = o3d.io.read_point_cloud(r"C:\Users\86159\Desktop\python\class9\bunny\data\bunny10k.ply")
pcd.paint_uniform_color([0.5,0.5,0.5])
pcd_tree = o3d.geometry.KDTreeFlann(pcd)
pcd.colors[100] =[1,0,0]
[k,idx,_] = pcd_tree.search_radius_vector_3d(pcd.points[3000],0.1) #索引半径小于0.02
np.asarray(pcd.colors)[idx[1:], :] = [0, 0, 1]
o3d.visualization.draw_geometries([pcd],width=1200,height=1000)
4.基于混合的检索
pcd.colors[2000]=[1, 0, 0]
[k2, idx2, _]=pcd_tree.search_hybrid_vector_3d(pcd.points[2000],0.05,200)
np.asarray(pcd.colors)[idx2[1:], :] = [0, 1, 0.8]
o3d.visualization.draw_geometries([pcd],width=1200,height=1000)
import open3d as o3d
import numpy as np
print("Open3D read Point Cloud")
pcd = o3d.io.read_point_cloud(r"C:\Users\86159\Desktop\python\class9\bunny\data\bunny10k.ply")
pcd.paint_uniform_color([0.5,0.5,0.5])
pcd_tree = o3d.geometry.KDTreeFlann(pcd)
pcd.colors[2000]=[1, 0, 0]
[k2, idx2, _]=pcd_tree.search_hybrid_vector_3d(pcd.points[2000],0.05,200)
np.asarray(pcd.colors)[idx2[1:], :] = [0, 1, 0.8]
o3d.visualization.draw_geometries([pcd],width=1200,height=1000)