Estou tentando aprender as cordas do processamento de imagens de Sensoriamento Remoto usando ligações Python GDAL e numpy. Como primeira tentativa, estou lendo um arquivo geotiff Landsat8, faça uma manipulação simples e escreva o resultado em um novo arquivo. O código abaixo parece funcionar bem, exceto que a varredura original é despejada no arquivo de saída, em vez da varredura manipulada.
Quaisquer comentários ou sugestões são bem-vindos, mas observa em particular por que a varredura manipulada não aparece no resultado.
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
Eu uso o Python 2.7.1 em uma máquina com Windows 7 de 32 bits.
gdainfo -stats original.tiff
egdal-config --version
também isso poderia ajudar.Respostas:
Seu script está ausente do método ds.FlushCache, que salva em disco o que você tem na memória ao final das modificações. Veja abaixo uma versão corrigida do seu exemplo. Observe que eu também adicionei duas linhas para definir a projeção e geotransformar como entrada
fonte
GetProjection()
fornece o EPSG correto, mas parece não ser aplicado. Urdidura GDAL ausente? Obrigado!