一、算法原理
看代码吧。。。步骤都在里面
二、代码
from pclpy import pcl
import numpy as np
if __name__ == '__main__':
# 加载点云
size_a, size_b = 100, 70 # 设置生成数目的大小
a = np.random.ranf(size_a*3).reshape(-1, 3) # 生成一个大小为size_a*3的一维数组,然后使用reshape函数将其重新排列为一个二维数组
cloud1 = pcl.PointCloud.PointXYZ.from_array(a) # 转换为点云格式
b = np.random.ranf(size_b*3).reshape(-1, 3) # 生成一个大小为size_b*3的一维数组,然后使用reshape函数将其重新排列为一个二维数组
cloud2 = pcl.PointCloud.PointXYZ.from_array(b + 1) # 将2维数组的xyz轴都进行+1
# 连接点 这里使用Numpy进行拼接
c = np.vstack((cloud1.xyz, cloud2.xyz))
cloud = pcl.PointCloud.PointXYZ.from_array(c)
print(cloud.size())
# 连接字段 pclpy似乎没有实现pcl::concatenateFields,这里使用Numpy进行拼接
a_n = np.random.ranf(size_a * 4).reshape(-1, 4) # 随机生成一点法线
d = np.hstack((a, a_n)) # 拼接字段
cloud_dn = pcl.PointCloud.PointNormal.from_array(d) # 拼接法线效果
# 上面的拼接法线效果不是很明显,试试拼接颜色
a_c = np.random.ranf(size_a*3).reshape(-1, 3)*255 # 随机生成颜色
cloud_dc = pcl.PointCloud.PointXYZRGB.from_array(a, a_c) # 拼接颜色
# 可视化
viewer = pcl.visualization.PCLVisualizer("viewer") # 窗口名
viewer.setBackgroundColor(0.0, 0.0, 0.0) # 背景颜色
viewer.addPointCloud(cloud_dc, "sample cloud") # 显示点云
while not viewer.wasStopped():
viewer.spinOnce(10)
三、结果
1.coloud1点云
2.cloud2点云
3.cloud1 和 colud2 合并
4.生成连接字段(拼接颜色)
四、相关链接
没有。。。可以看看专栏,有什么需要补充的@我