2017-02-28 46 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