Я пытаюсь изучить канвы обработки изображений с помощью дистанционного зондирования с использованием привязок Python GDAL и numpy. В качестве первой попытки я читаю файл геотекса Landsat8, делаю простую манипуляцию и записываю результат в новый файл. Приведенный ниже код работает нормально, за исключением того, что исходный растр выгружается в выходной файл, а не в управляемый растр.
Любые комментарии или предложения приветствуются, но особенно заметки о том, почему манипулирующий растр не отображается в результате.
import os
import gdal
gdal.AllRegister()
file = "c:\~\LC81980242015071LGN00.tiff"
(fileRoot, fileExt) = os.path.splitext(file)
outFileName = fileRoot + "_mod" + fileExt
ds = gdal.Open(file)
band = ds.GetRasterBand(1)
arr = band.ReadAsArray()
[cols, rows] = arr.shape
arr_min = arr.Min()
arr_max = arr.Max()
arr_mean = int(arr.mean())
arr_out = numpy.where((arr < arr_mean), 10000, arr)
driver = gdal.GetDriverByName("GTiff")
outdata = driver.Create(outFileName, rows, cols, 1, gdal.GDT_UInt16)
outband = outdata.GetRasterBand(1)
outband.WriteArray(arr_out)
outdata = None
print arr_min
> 0
print arr_max
> 65535
print arr_mean
> 4856
Я использую Python 2.7.1 на 32-битной машине с Windows 7.
gdainfo -stats original.tiff
и этоgdal-config --version
тоже может помочь.Ответы:
В вашем сценарии отсутствует метод ds.FlushCache, который сохраняет на диск то, что у вас есть в памяти в конце изменений. Ниже приведена исправленная версия вашего примера. Обратите внимание, что я также добавил две строки для установки проекции и геотрансформации в качестве входных данных.
источник
GetProjection()
чтобы получить правильный EPSG, но, похоже, он не применяется. GDAL деформация отсутствует? Благодаря!outdata.GetRasterBand(1).WriteArray(arr_out)
чтобы написать многоспектральное изображение, которое имеет более одной полосы?