连接两个点云
- 一、连接两个点云
- 二、代码
- 三、结果
- 1.coloud1点云
- 2.cloud2点云
- 3.cloud1 和 colud2 合并
- 4.生成连接字段(拼接颜色)
- 四、相关链接
- 五、问题与解决方案
- 1.问题
- 2.解决方案
一、连接两个点云
看代码吧。。。
二、代码
import numpy as np
import open3d as o3d
if __name__ == '__main__':
# 加载点云
size_a, size_b = 100, 70 # 设置生成数目的大小
a = np.random.ranf(size_a * 3).reshape(-1, 3) # 生成一个大小为size_a*3的一维数组,然后使用reshape函数将其重新排列为一个二维数组
cloud1 = o3d.geometry.PointCloud() # 使用numpy生成点云
cloud1.points = o3d.utility.Vector3dVector(a) # points numpy数组
# 转换为点云格式
b = np.random.ranf(size_b * 3).reshape(-1, 3) # 生成一个大小为size_b*3的一维数组,然后使用reshape函数将其重新排列为一个二维数组
cloud2 = o3d.geometry.PointCloud() # 使用numpy生成点云
cloud2.points = o3d.utility.Vector3dVector(b + 1) # points numpy数组 # 将2维数组的xyz轴都进行+1
# 连接点
cloud = cloud2 + cloud1
# 连接字段 pclpy似乎没有实现pcl::concatenateFields,这里使用Numpy进行拼接
a_n = np.random.ranf(size_a * 4).reshape(-1, 4) # 随机生成一点法线
d = np.hstack((a, a_n)) # 拼接字段
# 拼接法线效果
cloud_dn = o3d.geometry.PointCloud() # 使用numpy生成点云
# 提取了前三列作为点的坐标,并将其设置为PointCloud对象的坐标,提取了后三列作为法线,并将其设置为PointCloud对象的法线。
cloud_dn.points = o3d.utility.Vector3dVector(d[:, :3]) # 提取点的坐标并设置为点云对象的坐标
cloud_dn.normals = o3d.utility.Vector3dVector(d[:, 4:]) # 提取法向量并设置为点云对象的法向量
# 上面的拼接法线效果不是很明显,试试拼接颜色
a_c = np.random.ranf(size_a * 3).reshape(-1, 3) * 255 # 随机生成颜色
cloud_dc = o3d.geometry.PointCloud() # 拼接颜色
cloud_dc.points = o3d.utility.Vector3dVector(a_c) # 拼接颜色
# 可视化
o3d.visualization.draw_geometries([cloud_dn])
三、结果
1.coloud1点云
2.cloud2点云
3.cloud1 和 colud2 合并
4.生成连接字段(拼接颜色)
四、相关链接
没有。。。可以看看专栏,有什么需要补充的@我
五、问题与解决方案
1.问题
numpy
版本不对但numpy
下载不了
2.解决方案
前往D:\Anaconda\envs\open3d(自己命名的虚拟环境)\Lib\site-packages
删除numpy
并重新安装合适的版本即可。。。