获取 Python 中图像的值

Get the Values of an image in Python

我有一个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
'\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...

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

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

来自 gdal tutorial、"Note that the returned scanline is of type string, and contains xsize*4 bytes of raw binary floating point data. This can be converted to Python values using the struct module from the standard library:"

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()

改为使用 ReadAsArray。

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

参考网站:link