2017-05-31 19 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から返されるスキャンラインはstring型で、xsize * 4バイトの生2進浮動小数点データが含まれています。これは、標準ライブラリの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() 
関連する問題