点云处理技术之open3d第四篇:使用open3d绘制常用类型——箭头圆柱长方体球形箭头坐标轴和线条
Posted 非晚非晚
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了点云处理技术之open3d第四篇:使用open3d绘制常用类型——箭头圆柱长方体球形箭头坐标轴和线条相关的知识,希望对你有一定的参考价值。
文章目录
1. 绘制圆锥
用o3d.geometry.TriangleMesh.create_cone
来绘制圆锥,radius控制其半径,height控制其高度
import open3d as o3d
cone = o3d.geometry.TriangleMesh.create_cone(radius=1.0,
height=2.0,
resolution=20,
split=1)
cone.compute_vertex_normals()
cone.paint_uniform_color([0, 1, 0])
o3d.visualization.draw_geometries([cone])
2. 绘制圆柱
用o3d.geometry.TriangleMesh.create_cylinder
绘制圆柱,radius控制圆柱半径,height控制圆柱的高。
import open3d as o3d
mesh_cylinder = o3d.geometry.TriangleMesh.create_cylinder(radius=0.3,
height=4.0)
mesh_cylinder.compute_vertex_normals()
mesh_cylinder.paint_uniform_color([0.1, 0.4, 0.1])
o3d.visualization.draw_geometries([mesh_cylinder])
3. 绘制长方体
用o3d.geometry.TriangleMesh.create_box
绘制长方体,width,height,depth对应长方体长、宽和高度。
import open3d as o3d
mesh_box = o3d.geometry.TriangleMesh.create_box(width=2.0,
height=1.0,
depth=1.0)
mesh_box.compute_vertex_normals()
mesh_box.paint_uniform_color([0.9, 0.1, 0.1])
o3d.visualization.draw_geometries([mesh_box])
4. 绘制球形
用o3d.geometry.TriangleMesh.create_sphere
绘制球体,radius控制球的半径,resolution控制图形显示的分辨率,如果不设定分配率的话,默认值为20。
import open3d as o3d
mesh_sphere = o3d.geometry.TriangleMesh.create_sphere(radius=1.0,
resolution=100)
mesh_sphere.compute_vertex_normals()
mesh_sphere.paint_uniform_color([0.1, 0.1, 0.7])
o3d.visualization.draw_geometries([mesh_sphere])
5. 绘制箭头
用o3d.geometry.TriangleMesh.create_arrow
绘制箭头。
import open3d as o3d
arrow = o3d.geometry.TriangleMesh.create_arrow(cylinder_radius=1.0,
cone_radius=1.5,
cylinder_height=5.0,
cone_height=4.0,
resolution=20,
cylinder_split=4,
cone_split=1)
arrow.compute_vertex_normals()
arrow.paint_uniform_color([1, 0, 0])
o3d.visualization.draw_geometries([arrow])
6. 绘制坐标轴
用o3d.geometry.TriangleMesh.create_coordinate_frame
绘制坐标轴,其中size表示粗细,origin标识坐标原点。
import open3d as o3d
mesh_frame = o3d.geometry.TriangleMesh.create_coordinate_frame(
size=0.6, origin=[-2, -2, -2])
o3d.visualization.draw_geometries([mesh_frame])
7. 绘制多边形和顶点
可以通过o3d.visualization.Visualizer()
添加我们需要的组件,我们在下面使用了vis.add_geometry
添加了边和点,同样也可以使用它添加上面讲到的长方体、球形等
。
import open3d as o3d
import numpy as np
def polygon():
#绘制顶点
polygon_points = np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1],[0,0,5]])
lines = [[0, 1], [1, 2], [2, 3],[3,0]] #连接的顺序,封闭链接
color = [[1, 0, 0] for i in range(len(lines))]
#添加顶点,点云
points_pcd = o3d.geometry.PointCloud()
points_pcd.points = o3d.utility.Vector3dVector(polygon_points)
points_pcd.paint_uniform_color([0, 0.3, 0]) #点云颜色
#绘制线条
lines_pcd = o3d.geometry.LineSet()
lines_pcd.lines = o3d.utility.Vector2iVector(lines)
lines_pcd.colors = o3d.utility.Vector3dVector(color) #线条颜色
lines_pcd.points = o3d.utility.Vector3dVector(polygon_points)
return lines_pcd, points_pcd
if __name__ == "__main__":
axis_pcd = o3d.geometry.TriangleMesh.create_coordinate_frame(size=0.5, origin=[0, 0, 0])
vis = o3d.visualization.Visualizer()
vis.create_window(window_name='绘制多边形')
#vis.toggle_full_screen() #全屏
#设置
opt = vis.get_render_option()
opt.background_color = np.asarray([0, 0, 0]) #背景
opt.point_size = 1 #点云大小
opt.point_size = 10
#vis.add_geometry(axis_pcd)
lines, points = polygon()
vis.add_geometry(lines)
vis.add_geometry(points)
#vis.update_geometry(points)
vis.run()
vis.destroy_window()
8. 一次绘制多个类型
第7节中讲到了,我们可以使用vis.add_geometry
逐个添加我们需要绘制的类型,同样我们也可以使用以下方法一次性添加目标。
import open3d as o3d
mesh_box = o3d.geometry.TriangleMesh.create_box(width=1.0,
height=1.0,
depth=1.0)
mesh_box.compute_vertex_normals()
mesh_box.paint_uniform_color([0.9, 0.1, 0.1])
mesh_sphere = o3d.geometry.TriangleMesh.create_sphere(radius=1.0)
mesh_sphere.compute_vertex_normals()
mesh_sphere.paint_uniform_color([0.1, 0.1, 0.7])
mesh_cylinder = o3d.geometry.TriangleMesh.create_cylinder(radius=0.3,
height=4.0)
mesh_cylinder.compute_vertex_normals()
mesh_cylinder.paint_uniform_color([0.1, 0.9, 0.1])
mesh_frame = o3d.geometry.TriangleMesh.create_coordinate_frame(
size=0.6, origin=[-2, -2, -2])
# 一次性添加方法一:
o3d.visualization.draw_geometries(
[mesh_box, mesh_sphere, mesh_cylinder, mesh_frame])
# 一次性添加方法二:
o3d.visualization.draw_geometries(
[mesh_box + mesh_sphere + mesh_cylinder + mesh_frame])
以上是关于点云处理技术之open3d第四篇:使用open3d绘制常用类型——箭头圆柱长方体球形箭头坐标轴和线条的主要内容,如果未能解决你的问题,请参考以下文章
点云处理技术之open3d第一篇:open3d的快速安装简介文件的读写和可视化操作
点云处理技术之open3d第三篇:点云的高级操作篇——点云边界框凸包DBSCAN聚类平面分割和隐点移除
点云处理技术之open3d第二篇:点云的基本操作篇——可视化降采样法向量裁剪和绘制点云