【Python-Open3D学习笔记】003点云上色

【Python-Open3D学习笔记】003点云上色

1. 点云上色示例

pcd.paint_uniform_color([1, 0, 0])

import open3d as o3d
import numpy as np

# 创建一个示例点云
pcd = o3d.geometry.PointCloud()
pcd.points = o3d.utility.Vector3dVector(np.random.rand(2000, 3))
# 设置颜色为红色
pcd.paint_uniform_color([1, 0, 0])
# 可视化点云
o3d.visualization.draw_geometries([pcd], window_name="test", width=1024, height=768)

2. 实际数据案例

直接修改数据中的RGB

import os
import open3d as o3d
import pandas as pd

# 读取数据
root_path = r"E:\07-code\tunnelProjectTemp\outer\data\init\regions"
root = {}
with os.scandir(root_path) as entries:
    for entry in entries:
        if entry.is_file() and entry.name.endswith('.csv'):
            root[entry.name[:-4]] = pd.read_csv(entry.path)

# 拼接数据
res_df = pd.concat(list(root.values()), ignore_index=True)

# 修改颜色
res_df['R'] = 78 / 255.0
res_df['G'] = 238 / 255.0
res_df['B'] = 148 / 255.0

# 构建点云数据
pcd = o3d.geometry.PointCloud()
pcd.points = o3d.utility.Vector3dVector(res_df[['X', 'Y', 'Z']].values)
pcd.colors = o3d.utility.Vector3dVector(res_df[['R', 'G', 'B']].values)

# 可视化点云
o3d.visualization.draw_geometries([pcd], window_name="test", width=1024, height=768)

3. 小结

不管是采用PointCloud类中内置的颜色设置方法,还是直接操作原始数据设定颜色,需要注意的是所选取的对RGB值必须在 [0, 1]范围内,否则颜色不能正常显示,因此需要对RGB值进行归一化操作。

# 修改颜色
res_df['R'] = 78 / 255.0
res_df['G'] = 238 / 255.0
res_df['B'] = 148 / 255.0
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用Open3D库的transform方法来实现点云的旋转和平移。具体步骤如下: 1. 加载点云数据 首先需要加载点云数据,可以使用Open3D库中的read_point_cloud函数从文件中读取点云数据,也可以使用create_point_cloud_from_array函数从数组中创建点云数据。 例如: ```python import open3d as o3d # 从文件中读取点云数据 pcd = o3d.io.read_point_cloud("point_cloud.ply") # 或者从数组中创建点云数据 import numpy as np points = np.array([[0, 0, 0], [0, 1, 0], [1, 1, 0], [1, 0, 0]]) pcd = o3d.geometry.PointCloud() pcd.points = o3d.utility.Vector3dVector(points) ``` 2. 旋转点云 使用Open3D库中的旋转函数rotate来对点云进行旋转。旋转函数的参数是旋转矩阵,可以使用Open3D库中的get_rotation_matrix_from_axis_angle函数来获取旋转矩阵。 例如,将点云绕x轴旋转90度: ```python import numpy as np import open3d as o3d # 从文件中读取点云数据 pcd = o3d.io.read_point_cloud("point_cloud.ply") # 获取绕x轴旋转90度的旋转矩阵 rotation_matrix = np.array([[1, 0, 0], [0, 0, -1], [0, 1, 0]]) pcd.rotate(rotation_matrix) # 可视化旋转后的点云 o3d.visualization.draw_geometries([pcd]) ``` 3. 平移点云 使用Open3D库中的平移函数translate来对点云进行平移。平移函数的参数是平移向量,可以使用numpy数组来表示。 例如,将点云沿x轴平移1个单位: ```python import numpy as np import open3d as o3d # 从文件中读取点云数据 pcd = o3d.io.read_point_cloud("point_cloud.ply") # 将点云沿x轴平移1个单位 translation_vector = np.array([1, 0, 0]) pcd.translate(translation_vector) # 可视化平移后的点云 o3d.visualization.draw_geometries([pcd]) ``` 注意,在对点云进行旋转和平移时,需要修改点云的坐标属性。Open3D库中的PointCloud类中包含了一个points属性,它是一个Vector3dVector类型的向量,表示点云中的所有点的坐标。可以使用该属性来修改点云中的坐标。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值