WxGL附带了几个工具函数,其中read_pcfile用来解析.ply和.pcd格式的点云文件,该函数返回一个PointCloudData类实例,包含以下属性:
- PointCloudData.ok - 数据是否可用,布尔型
- PointCloudData.info - 数据可用性说明,字符串
- PointCloudData.raw - 解读出来的原始数据,字典
- PointCloudData.fields - 数据字段(项)名称,列表
- PointCloudData.xyz - 点的坐标数据,None或者numpy数组(ndarray)
- PointCloudData.rgb - 点的颜色数据,None或者numpy数组(ndarray)
- PointCloudData.intensity - 点的强度数据,None或者numpy数组(ndarray)
以下代码在IDLE中演示了read_pcfile函数的用法,其中用到的点云文件可从这个地址下载:https://github.com/xufive/wxgl/tree/master/example/res/pointcloud。
>>> import wxgl
>>> ds = wxgl.read_pcfile('/Users/xufive/MyCode/pc/bunny.ply')
>>> ds.ok
True
>>> ds.info
'正常:数据可用'
>>> ds.fields
['x', 'y', 'z', 'confidence', 'intensity']
>>> ds.raw['intensity'].shape
(35947,)
>>> ds.xyz.shape
(35947, 3)
数据解读出来之后,调用app.scatter方法即可绘制出点云模型。
>>> app = wxgl.App()
>>> app.scatter(ds.xyz)
>>> app.show()
通常点云数据不携带颜色信息,但可能包含激光反射强度。如果数据中有颜色信息,或者用强度信息映射为颜色,则需要用户自行判别并在app.scatter方法中提供color(颜色)参数,或者data(数据)和cm(调色板)参数。还有另外一种更简单的方式,那就是直接使用app.pointcloud方法,只需要一个点云文件参数即可绘制出点云模型,该方法会自动识别文件是否包含颜色信息和激光强度信息。
>>> import wxgl
>>> app = wxgl.App(haxis='z', bg='#001020')
>>> app.pointcloud('/Users/xufive/MyCode/pc/isprs/4.pcd')
>>> app.show()