在2个大的光栅阵列中循环,然后减去每个b

2024-06-17 10:43:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个大光栅,我需要从一个减去另一个得到的差异。光栅阵列太大,无法放入内存,因此我需要分块读取它们并进行减法

所以我相信我可以把每一幅图像作为一个数组块来读,但是我不知道如何减去它们

image1 = '/vsimem/array_size_new.vrt'
image2 = '/vsimem/array_size_old.vrt'

new_image = gdal.Open(image1)
old_image = gdal.Open(image2)

raster_xsize = new_image.RasterXSize
raster_ysize = new_image.RasterYSize

def myfunc(large_raster_file):
    in_ds = gdal.Open(large_raster_file, gdal.GA_ReadOnly)
    in_band = in_ds.GetRasterBand(1)
    block_xsize, block_ysize = in_band.GetBlockSize()
    print("Start reading")
    for b_y, yoff in enumerate(range(0, in_ds.RasterYSize, block_ysize)):
        for b_x, xoff in enumerate(range(0, in_ds.RasterXSize, block_xsize)):
            win_xsize, win_ysize = in_band.GetActualBlockSize(b_x, b_y)
            img_arr = in_band.ReadAsArray(xoff=xoff, yoff=yoff, \
                    win_xsize=win_xsize, win_ysize=win_ysize)
            return img_arr

那我就得做些

image_Change = myfunc(new_image)-myfunc(old_image)
print (image_Change)

这显然是不正确的,我认为这给了我的想法,我正在努力完成

理想情况下,我的输出将是两个其他数组之间差异的组合数组


Tags: inimagenewbandds数组openmyfunc