在 Python 中按块加载图像以进行 GDAL 处理
Load image by chunks in Python for GDAL processing
我需要加载图像 *.tif
以便在 GDAL 中处理它。我使用此代码:
data = gdal.Open("a.tif", gdal.GA_ReadOnly)
img = data.ReadAsArray()
所有这些都适用于小图像 (~10Mb)。但是当我尝试加载更大的图像(~1Gb)时,它开始使用大量内存(~15Gb RAM)。
如何按块加载此图像以进行顺序处理?
谢谢!
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
我需要加载图像 *.tif
以便在 GDAL 中处理它。我使用此代码:
data = gdal.Open("a.tif", gdal.GA_ReadOnly)
img = data.ReadAsArray()
所有这些都适用于小图像 (~10Mb)。但是当我尝试加载更大的图像(~1Gb)时,它开始使用大量内存(~15Gb RAM)。 如何按块加载此图像以进行顺序处理?
谢谢!
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