Próbuję nauczyć się obsługi przetwarzania obrazu za pomocą teledetekcji za pomocą powiązań i numpy w Pythonie GDAL. Jako pierwszą próbę czytam plik geotiff Landsat8, wykonuję prostą manipulację i zapisuję wynik w nowym pliku. Poniższy kod wydaje się działać dobrze, z tym wyjątkiem, że oryginalny raster jest zrzucany do pliku wyjściowego, a nie zmanipulowany raster.
Wszelkie uwagi i sugestie są mile widziane, ale w szczególności uwagi na temat tego, dlaczego zmanipulowany raster nie wyświetla się w wyniku.
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
Używam Python 2.7.1 na 32-bitowym komputerze z systemem Windows 7.
gdainfo -stats original.tiff
agdal-config --version
także to może pomóc.Odpowiedzi:
W twoim skrypcie brakuje metody ds.FlushCache, która zapisuje na dysku to, co masz w pamięci pod koniec modyfikacji. Zobacz poniżej poprawioną wersję swojego przykładu. Zauważ, że dodałem również dwie linie, aby ustawić projekcję i geotransform jako dane wejściowe
źródło
GetProjection()
dostarcza prawidłowego EPSG, ale wydaje się, że nie został zastosowany. Brak osnowy GDAL? Dzięki!outdata.GetRasterBand(1).WriteArray(arr_out)
aby napisać obraz wielospektralny, który ma więcej niż jeden zespół?