Вопрос:
Как программно вернуть растр, который отличается от двух (разных по размеру) красных полос?
т.е.
gdal_calc.py -A 'WARPED.tif' -B 'DSC_1636.tif' --outfile = 'dif.tif' --calc = "A-B"
Растровый калькулятор QGIS выполняет эту функцию просто отлично.Однако предыдущий код возвращает следующую ошибку.
Исключение: ошибка!Размеры файла DSC_1636.tif (7380, 4928) отличаются от других файлов (7743, 5507).Невозможно продолжить
В настоящее время у меня сложилось впечатление, что я должен читать растры, используя определенный экстент, созданный путем нахождения перекрытия, как показано ниже, но я все еще не могу выполнить эту работу.
# Subtract two rasters of different dimensions
# Pixel coordinates define overlap
import os, sys
from PIL import Image
from osgeo import gdal, ogr, osr
gdal.UseExceptions()
# Use PIL to get information from images
im1 = Image.open('DSC_0934-warped.tif')
print('warped image size is %s ' % str(im1.size))
im2 = Image.open('DSC_1636.png')
print('initial image (image 2) size is %s' % str(im2.size))
размер деформированного изображения составляет (7743, 5507)
исходное изображение (изображение 2), размер составляет (7380, 4928)
# Use GDAL to get information about images
def get_extent(fn):
'''Returns min_x, max_y, max_x, min_y'''
ds = gdal.Open(fn)
gt = ds.GetGeoTransform()
return (gt[0], gt[3], gt[0] + gt[1] * ds.RasterXSize,
gt[3] + gt[5] * ds.RasterYSize)
print('extent of warped.tif is %s' % str(get_extent('DSC_0934-warped.tif')))
print('extent of 1636.png is %s' % str(get_extent('DSC_1636.png')))
Степень warped.tif составляет (-375,3831214210602, 692,5167764068751, 7991,3588371542955, -5258.102875649754)
степень 1636.png составляет (0,0, 0,0, 7380,0, 4928,0)
r1 = get_extent('DSC_0934-warped.tif')
r2 = get_extent('DSC_1636.png')
# Get left, top, right, bottom of dataset's bounds in pixel coordinates
intersection = [max(r1[0], r2[0]),
min(r1[1], r2[1]),
min(r1[2], r2[2]),
max(r1[3], r2[3])]
print('checking for overlap')
if (intersection[2] < intersection[0]) or (intersection[1] > intersection[3]):
intersection = None
print('no overlap')
else:
print('intersection overlaps at: %s' % intersection)
проверка перекрытия
пересечения пересечений в: [0,0, 0,0, 7380,0, 4928,0]