2017-05-31 67 views
0

我有一個GeoTIFF,我需要獲取每個像素的值。在Python中獲取圖像的值

我繼續這樣:

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... 

我需要這個數據轉換成可讀的值。

換句話說,我需要獲取圖像的值,以便計算值大於指定閾值的像素數。 「

回答

1

改爲使用ReadAsArray。

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

參考網站:link

1

從gdal tutorial」請注意,返回的掃描行是字符串類型,包含xsize * 4個字節的原始二進制浮點數據,可以使用標準庫中的結構模塊將其轉換爲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()