码迷,mamicode.com
首页 > 其他好文 > 详细

地图瓦片PNG8格式理解

时间:2020-03-13 18:51:46      阅读:93      评论:0      收藏:0      [点我收藏+]

标签:一个   strong   getc   tco   span   lock   int   font   array   

地图切片后的格式是单波段的png格式。

技术图片

利用gdal读取该文件,看下文件结构:

band = gdal.Open(filepath).GetRasterBand(1)

band.ReadAsArray()

array([[217, 217, 217, ..., 217, 217, 217], [217, 217, 217, ..., 217, 217, 217], [217, 217, 217, ..., 217, 217, 217], ..., [243, 146, 78, ..., 217, 217, 217], [238, 86, 32, ..., 217, 217, 217], [166, 78, 0, ..., 217, 217, 217]], dtype=uint8)

len(band.ReadAsArray())
Out[161]: 256

  说明该图片是一个256*256大小的图片。最大值是243.

import numpy as np

np.max(band.ReadAsArray())
Out[163]: 243

  这个数组看上去像是灰度图片,实际是只是颜色表的索引值。

颜色表是什么呢:

[band.GetColorTable().GetColorEntry(i) for i in range(244)]
Out[158]: 
[(171, 198, 239, 255),
 (177, 199, 234, 255),
 (177, 200, 237, 255),
 (180, 203, 239, 255),
 (181, 205, 241, 255),
 (182, 201, 229, 255),
 (182, 203, 235, 255),
 (186, 205, 237, 255),
 (187, 202, 224, 255),
 (187, 205, 234, 255),
 (187, 207, 239, 255),
 (189, 208, 239, 255),
 (190, 210, 241, 255),

  颜色表,存储的就是颜色值了,上面例子以RGB格式存储,

(171, 198, 239, 255) R=171 G=198 B=239 最后一个255没用到
所以,上表有244个颜色值,序号为[0,243]
这里的243和上面的栅格数组最大值243刚好对应。

下面补全一张颜色表,第一列是索引值。

技术图片


至此,想明白了这个PNG的数据结构:索引表+颜色表。
索引表就是ReadAsArray()方法返回的数组,索引表的值就是来自颜色表的第一列。
array([[217, 217, 217, ..., 217, 217, 217],
       [217, 217, 217, ..., 217, 217, 217],
       [217, 217, 217, ..., 217, 217, 217],
       ...,
       [243, 146,  78, ..., 217, 217, 217],
       [238,  86,  32, ..., 217, 217, 217],
       [166,  78,   0, ..., 217, 217, 217]], dtype=uint8)
例如,数组中的 217 就是颜色表中的第217个值。

技术图片

地图瓦片PNG8格式理解

标签:一个   strong   getc   tco   span   lock   int   font   array   

原文地址:https://www.cnblogs.com/zqctzk/p/12488099.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!