一年多以前使用python的pcl库,实现过将深度图转换为点云。这次研究过程中再次想使用的时候发现ubuntu18.04默认安装的是pcl1.8,而python-pcl需要的是pcl1.7,搞了一下午就是不能匹配上。于是退而求其次,发现了pclpy这个库。
https://github.com/davidcaron/pclpy
安装pclpy的命令
conda install -c conda-forge -c davidcaron pclpy
貌似只支持conda安装,不支持pip安装。目前这个库在ubuntu和windows下都可以使用,支持python3.6、3.7、3.8。
而从深度图生出点云,之前的博客里也有,这里附上pclpy这个库的用法以及主要部分的代码
from pclpy import pcl
#depth是深度图,RGB分别是彩色图的三通道
for m in range(0,len(depth)):
for n in range(0,len(depth[0])):
d = depth[m][n]
if d == 0:
pass
else:
z = float(d) #如果从深度的png图读入,感觉不需要像很多教程那样子 1000/d
x = (n-cx_d) * z / fx_d
y = (m-cy_d) * z / fy_d
xyz_point = [x,y,z]
rgb_point = [R[m][n], G[m][n], B[m][n]]
xyz.append(xyz_point)
rgb.append(rgb_point)
xyz = np.array(xyz)
rgb = np.array(rgb)
#点云写入pclpy库下的格式
cloud = pcl.PointCloud.PointXYZRGBA.from_array(xyz, rgb)
writer = pcl.io.PCDWriter()
writer.writeBinary('name.pcd', cloud)
然后再说一个问题,pclpy的最新版本把点云显示部分的函数删掉了,也是一些不兼容的问题。这里推荐安装cloudcompare软件,安装完了以后直接将生出的点云拖进去就能显示。
cloudcompare安装
sudo snap install cloudcompare
sudo snap refresh --edge cloudcompare