Verkettung von GDAL-FunktionenPython

Python-Programme
Anonymous
 Verkettung von GDAL-Funktionen

Post by Anonymous »

Ich versuche, drei Einzelbandbilder zu lesen und sie mit gdal/python zu einem 3-Bandbild zu kombinieren.
Ich habe eine funktionierende Lösung gefunden, aber sie scheint nicht optimal zu sein:
from osgeo import gdal
import numpy as np

red_path = "F:/B4.TIF"
green_path = "F:/B2.TIF"
blue_path = "F:/B1.TIF"

red = gdal.Open(red_path)
gt = red.GetGeoTransform()
prj = red.GetProjection()

red_img = gdal.Open(red_path)
red_band = red_img.GetRasterBand(1)
red_array = red_band.ReadAsArray().astype(np.float32)

green_img = gdal.Open(green_path)
green_band = green_img.GetRasterBand(1)
green_array = green_band.ReadAsArray().astype(np.float32)

blue_img = gdal.Open(blue_path)
blue_band = blue_img.GetRasterBand(1)
blue_array = blue_band.ReadAsArray().astype(np.float32)

driver = gdal.GetDriverByName("GTiff")
driver.Register()

final_img = driver.Create("combined_colors.tiff",
xsize=red_array.shape[1],
ysize=red_array.shape[0],
bands=3,
eType=gdal.GDT_Float32)
final_img.SetGeoTransform(gt)
final_img.SetProjection(prj)

first_band = final_img.GetRasterBand(1)
first_band.WriteArray(red_array)
first_band.SetNoDataValue(np.nan)
first_band.FlushCache()
first_band = None

second_band = final_img.GetRasterBand(2)
second_band.WriteArray(green_array)
second_band.SetNoDataValue(np.nan)
second_band.FlushCache()
second_band = None

third_band = final_img.GetRasterBand(3)
third_band.WriteArray(blue_array)
third_band.SetNoDataValue(np.nan)
third_band.FlushCache()
third_band = None

final_img = None

Jetzt möchte ich die gleichen Schritte ausführen, aber in einer saubereren Syntax. Deshalb habe ich versucht, mehrere Vorgänge in einer Zeile auszuführen, aber es funktioniert nicht mehr.
from osgeo import gdal
import numpy as np

red_path = "F:/B4.TIF"
green_path = "F:/B2.TIF"
blue_path = "F:/B1.TIF"

red = gdal.Open(red_path)
gt = red.GetGeoTransform()
prj = red.GetProjection()

red = gdal.Open(red_path).GetRasterBand(1).ReadAsArray().astype(np.float32)
green = gdal.Open(green_path).GetRasterBand(1).ReadAsArray().astype(np.float32)
blue = gdal.Open(blue_path).GetRasterBand(1).ReadAsArray().astype(np.float32)

driver = gdal.GetDriverByName("GTiff")
driver.Register()

final_img = driver.Create("combined_colors.tiff",
xsize=red.shape[1],
ysize=red.shape[0],
bands=3,
eType=gdal.GDT_Float32)
final_img.SetGeoTransform(gt)
final_img.SetProjection(prj)

final_img.GetRasterBand(1).WriteArray(red)
final_img.GetRasterBand(2).WriteArray(green)
final_img.GetRasterBand(3).WriteArray(blue)
final_img.FlushCache()

final_img = None

Weiß jemand, warum der zweite Code nicht funktioniert?
Vielen Dank im Voraus

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post
  • Warp mit der Java GDAL API
    by Guest » » in Java
    0 Replies
    14 Views
    Last post by Guest
  • GDAL - Transformpoint Argumente
    by Anonymous » » in C#
    0 Replies
    2 Views
    Last post by Anonymous
  • GDAL - Transformpoint Argumente
    by Anonymous » » in C#
    0 Replies
    3 Views
    Last post by Anonymous
  • Schreibstil, um die Verkettung von Zeichenfolgen in einer Liste von Zeichenfolgen zu verhindern
    by Guest » » in Python
    0 Replies
    13 Views
    Last post by Guest
  • Übergeben von Arrays von Funktionen in PHP [Duplikat] von Funktionen hin und her
    by Anonymous » » in Php
    0 Replies
    16 Views
    Last post by Anonymous