2017-02-28 4 views
0

GDALで処理するには画像*.tifをロードする必要があります。私はこのコードを使用します:GDAL処理のためにPythonでチャンク単位で画像をロード

data = gdal.Open("a.tif", gdal.GA_ReadOnly) 
img = data.ReadAsArray() 

小さな画像(〜10Mb)でもうまくいきます。しかし、大きな画像(〜1Gb)を読み込もうとすると、たくさんのメモリ(〜15Gb RAM)が使用され始めます。 この画像を逐次処理用のチャンクでどのように読み込むことができますか?

ありがとうございます!

+0

http://stackoverflow.com/questions/19695249/load-just-part-of-an-image-in-python – aslavkin

答えて

2

ReadAsArray()には、画像の一部を読み取るためのいくつかのオプションのパラメータがあります。

ReadAsArray(x_off, y_off, x_size, y_size) 

全コード:

import gdal 
ds = gdal.Open('input.tif', gdal.GA_ReadOnly) 
rb = ds.GetRasterBand(1) 
xsize = rb.XSize 
ysize = rb.YSize 
ystep = ysize/10 
yresidual = ysize - (ystep * 10) 

for i in range(10): 
    if i != 9: 
     img_part = rb.ReadAsArray(0, ystep * i, xsize, ystep) 
    else: 
     img_part = rb.ReadAsArray(0, ystep * i, xsize, ystep + yresidual) 
    # do something with img_part 

ds = None 
関連する問題