基础点云学习:点云上色、大小改变、窗口背景改变、绘制常用类型图形

一、点云上色

1.1 直接上色
pcd.paint_uniform_color([0, 0, 1.0])  # 渲染颜色

参数介绍

color:颜色值,可以是包含三个浮点数的列表或元组,表示 RGB 颜色空间中的颜色。数值类型为float64,每个值的范围是 [0, 1], 若用户输入的值越界则被截断。

结果展示
在这里插入图片描述

1.2 延轴点云渲染
    cloud = o3d.io.read_point_cloud("点云文件")
    pts = np.asarray(cloud.points)  # 点云转换为ndarray

    # 改变轴
    axis = 2   # x轴 0 y轴 1 z轴2  后期会讲解只是有关数组的
    # 平分程度
    avg = 2
    # 根据高度生成色彩
    colors = np.zeros([pts.shape[0], 3])  # 生成一个空的与点云相同大小的ndarray

    height_max = np.max(pts[:, axis])  # z轴最大

    height_min = np.min(pts[:, axis])  # z轴最小

    delta_c = abs(height_max - height_min) / (255*avg)
    for j in range(pts.shape[0]):
        color_n = (pts[j, axis] - height_min) / delta_c
        if color_n <= 255:
            colors[j, :] = [0, 1 - color_n / 255, 1]
        else:
            colors[j, :] = [(color_n - 255) / 255, 0, 1]

    cloud.colors = o3d.utility.Vector3dVector(colors)  # 给点云颜色
    o3d.visualization.draw_geometries([cloud])  # 可视化

参数介绍

axis = 2 ,x轴:0 y轴:1 z轴:2 后期会讲解只是有关numpy数组的。avg=2,决定颜色的占比,可自行尝试。

结果展示

在这里插入图片描述

二、窗口背景颜色、点云大小

2.1 可视化窗口背景颜色调整
	pcd = o3d.io.read_point_cloud('点云路径')
    vis = o3d.visualization.Visualizer()
    vis.create_window()  # 创建窗口

    render_option = vis.get_render_option()  # 设置点云渲染参数
    render_option.background_color = [0, 0, 0]  # 设置背景色(这里为黑色)(RGB RGB 颜色空间中的颜色)
    
    vis.add_geometry(pcd)  # 添加点云
    vis.run()

background_color参数调整

color:颜色值,可以是包含三个浮点数的列表或元组,表示 RGB 颜色空间中的颜色。数值类型为float64,每个值的范围是 [0, 1], 若用户输入的值越界则被截断。

可视化窗口颜色改变

在这里插入图片描述

2.2 点云大小调整
2.2.1 open3d代码调整点云大小
	pcd = o3d.io.read_point_cloud('点云路径')
	vis = o3d.visualization.Visualizer()
    vis.create_window()  # 创建窗口

    render_option = vis.get_render_option()  # 设置点云渲染参数
    print(type(render_option))
    render_option.point_size = 10  # 设置渲染点的大小(范围并没有具体数据)

    vis.add_geometry(pcd)  # 添加点云
    vis.run()

point_size参数调整

在 Open3D 中,point_size 的默认值是 1,表示点的直径为 1 个像素。你可以根据需要调整这个值,通常可以设置为任何大于 0 的整数或浮点数。较大的值将使点更大,较小的值将使点更小。例如,你可以尝试设置 point_size 为 2、3、4 等以获得更大的点。

2.2.2 open3d窗口调整点云大小

open3d窗口中,通过键盘上的+-,可以调整点的大小。

结果展示

在这里插入图片描述

**注意:**使用 原始点云.point_size = 2错误的, Open3D 中,PointCloud 类并没有名为 point_size 的属性。o3d.visualization.draw_geometries([点云], point_size=2)也是错误的。

三、绘制常用类型——圆锥、圆柱、长方体、球形、箭头、坐标轴和线条(了解)

绘制圆锥

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])

在这里插入图片描述

绘制圆柱

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])

在这里插入图片描述

绘制长方体

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])

在这里插入图片描述

绘制球形

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])

在这里插入图片描述

绘制箭头

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])

在这里插入图片描述

绘制坐标轴

o3d.geometry.TriangleMesh.create_coordinate_frame绘制坐标轴,其中size表示粗细,origin标识坐标原点。

在这里插入图片描述

绘制多边形和顶点

可以通过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() 

在这里插入图片描述

四、文档和点云数据集

ope3d 官方文档:PointCloud - Open3D 0.18.0 documentation

点云数据:百度网盘链接:https://pan.baidu.com/s/1SDy8PCeQlj0EvZHj_f9XSA
提取码:yqny

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

云杂项

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

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

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

打赏作者

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

抵扣说明:

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

余额充值