我有一个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...
我需要将此数据转换为可读值。
换句话说,我需要获取图像的值,以便计算值大于指定阈值的像素数。
答案 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