在Python中获取图像的值

时间:2017-05-31 12:51:19

标签: python image gdal

我有一个GeoTIFF,我需要获取每个像素的值。

我继续这样做:

import gdal
from gdalconst import *

im = gdal.Open("test.tif", GA_ReadOnly)
band = im.GetRasterBand(1)
bandtype = gdal.GetDataTypeName(band.DataType)
scanline = band.ReadRaster( 0, 0, band.XSize, 1,band.XSize, 1, band.DataType)

scanline包含无法解释的值:

>>> scanline
'\x19\xfc\x19\xfc\x19\xfc\x19\xfc\x19\xfc\x19\xfc\x19\xfc\x19\xfc\x19\xfc\x19\xfc\x19\xfc\x19\xfc\x19\xfc\x19\xfc\x19\xfc\x19\xfc\x19\xfc\x19\xfc\x19\xfc\x19\xfc\x19
\xfc\x19\xfc\x19\xfc\x19\xfc\x19\xfc\x19\xfc\x19\xfc\x19\xfc\x19\xfc\x19\xfc\x19\xfc\x19\xfc\x19\xfc\x19\xfc\x19\xfc\x19\xfc\x19\xfc\x19\xfc\x19\xfc\x19\xfc\x19\xfc\
x19\xfc\x19\xfc\x19...

我需要将此数据转换为可读值。

换句话说,我需要获取图像的值,以便计算值大于指定阈值的像素数。

2 个答案:

答案 0 :(得分:1)

从gdal tutorial,“请注意,返回的扫描行是string类型,包含xsize * 4字节的原始二进制浮点数据。可以使用标准中的struct模块将其转换为Python值库:“

import struct
tuple_of_floats = struct.unpack('f' * b2.XSize, scanline)

或者,根据您最终尝试对数据执行的操作,您可以将其作为数组读取(这会打开使用numpy进行计算的大门)。

import gdal

im = gdal.Open("test.tif", GA_ReadOnly)
data_array = im.GetRasterBand(1).ReadAsArray()

答案 1 :(得分:1)

改为使用ReadAsArray。

//for float data type
scanline = band.ReadAsArray( 0, 0, band.XSize, band.YSize).astype(numpy.float)

请参阅网站:link