2017-02-28 43 views
0

我需要加載圖像*.tif以在GDAL中處理它。我使用此代碼:通過Python在GDAL處理中加載圖像

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