网络知识 娱乐 【点云处理技术之open3d】第四篇:使用open3d绘制常用类型——箭头、圆柱、长方体、球形、箭头、坐标轴和线条

【点云处理技术之open3d】第四篇:使用open3d绘制常用类型——箭头、圆柱、长方体、球形、箭头、坐标轴和线条

文章目录

  • 1. 绘制圆锥
  • 2. 绘制圆柱
  • 3. 绘制长方体
  • 4. 绘制球形
  • 5. 绘制箭头
  • 6. 绘制坐标轴
  • 7. 绘制多边形和顶点
  • 8. 一次绘制多个类型

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 #点云大小
 
    #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])

在这里插入图片描述