Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Terrain aus Bildern
#1
Ich habe mal so ein kleines Python Programm geschrieben was einfach aus einem x Belibigen Bild ein fast fertiges Terrain erstellt.

heightmap.py Groesse Weichzeichnen Helligkeit Dateiname

Groesse muss in 256er schritten erfolgen z.B. 256, 512, 768, 1024 u.s.w.
Weichzeichnen ist, damit die harten Kannten weicher werden, ein vernuenftiger Wert liegt zwischen 0.0 und 5.0 (0 = keine Veränderung)
Helligkeit um die hoehe zu reduzieren, Werte um 0.2 - 0.5 sind gut. (1 = keine Veränderung)
Dateiname und ggf. Pfad des zu ladenden Bildes.

## Linux:
#./heightmap.py 256 1.5 0.2 /Pfad/Bild.jpg

## Windows:
#C:/Python38/python.exe heightmap.py 256 1.5 0.2 G:/Pfad/Bild.jpg

# Die Bilddatei kann jpg, png, ico, bmp und so weiter sein.
# Das ausgabeformat ist eine 24 bit png heightmap fuer den OpenSimulator.

Benutzung auf eigene Gefahr!!!

Python 3
pip3 install Image

Code:
#!/usr/bin/env python3

from sys import argv
import glob, os
from PIL import Image
from PIL import ImageOps
from PIL import ImageFilter
from PIL import ImageEnhance

### Aufruf Beispiele

# heightmap.py Groesse Weichzeichnen Helligkeit Dateiname

# Groesse muss in 256er schritten erfolgen z.B. 256, 512, 768, 1024 u.s.w.
# Weichzeichnen ist, damit die harten Kannten weicher werden, ein vernuenftiger Wert liegt zwischen 0.0 und 5.0
# Helligkeit um die hoehe zu reduzieren, Werte um 0.2 sind gut.
# Dateiname und ggf. Pfad des zu ladenden Bildes.

## Linux:
#./heightmap.py 256 1.5 0.2 /Pfad/Bild.jpg

## Windows:
#C:/Python38/python.exe heightmap.py 256 1.5 0.2 G:/Pfad/Bild.jpg

# Die Bilddatei kann jpg, png, ico, bmp und so weiter sein.
# Das ausgabeformat ist eine 24 bit png heightmap fuer den OpenSimulator.

xsize = int(argv[1])            # Einstellung groesse
gaussianradius = float(argv[2]) # Einstellung weichzeichnen der Uebergaenge Wasser Land
brightness = float(argv[3])     # Einstellung Helligkeit
filename = (argv[4])            # Einstellung Dateiname

size = xsize, xsize

print(size)                     # Kontrollausgabe
print(gaussianradius)           # Kontrollausgabe
print(brightness)               # Kontrollausgabe
print(filename)                 # Kontrollausgabe

for infile in glob.glob(filename):
    file, ext = os.path.splitext(infile)
    im = Image.open(infile)                                     # Datei oeffnen
    im = im.convert('LA')                                       # in Graustufen umwandeln
    im = im.resize((size))                                      # groesse aendern
    
    im = im.filter(ImageFilter.GaussianBlur(gaussianradius))    # weichzeichnen der Uebergaenge
    im = im.convert('RGB')                                      # konvertieren in 24bit

    # Terrain muss zwischen 1E1E1E und 464646 (-10 und +30 Meter)liegen - 1m. ueber Boden = 292929 - Wasserhoehe = 282828
    brightnessMod = ImageEnhance.Brightness(im)                 # Helligkeit anpassen
    im = brightnessMod.enhance(brightness)                      # Helligkeit anpassen
    
    #contrastMod = ImageEnhance.Contrast(im)                    # Kontrast anpassen
    #im = contrastMod.enhance(contrast)                         # Kontrast anpassen
    
    #sharpnessMod = ImageEnhance.Sharpness(im)                  # Schaerfe anpassen
    #im = sharpnessMod.enhance(sharpness)                       # Schaerfe anpassen
    
    outfile = file + str(xsize)                                 # Konvertiert die Regionsgroesse in ein String und haengt diesen an den Dateinamen an.
    im.save(outfile + ".png", "PNG")                            # Datei speichern
[Bild: attachment.php?aid=2586]


[-] The following 4 users say Thank You to Manfred Aabye for this post:
  • Bogus Curry, Dorena Verne, Mareta Dagostino, Xenos Yifu
Zitieren
#2
Cool, muss ich mal ausprobieren.
LG Xenos
Xenovar


Zitieren
#3
Hab noch etwas gefunden opencv das ist ja klasse.
Nach dem Start des Programmes öffnen sich 8 Fenster.

Python 3
pip3 install opencv-python
pip3 install opencv-contrib-python

Code:
import cv2
# (cv2)OpenCV (Open Source Computer Vision Library: http://opencv.org )
# ist eine Open Source BSD-lizenzierte Bibliothek,
# die mehrere Hundert Computer Vision Algorithmen enthaelt.

# Bild lesen
img = cv2.imread('1k.jpg', 1)
cv2.imshow("img",img)

# Bild in LAB Farbmodell konvertieren
lab= cv2.cvtColor(img, cv2.COLOR_BGR2LAB)
cv2.imshow("lab",lab)

# Aufteilen des LAB Bildes auf verschiedene Kanaele
l, a, b = cv2.split(lab)
cv2.imshow('l_channel', l)
cv2.imshow('a_channel', a)
cv2.imshow('b_channel', b)

# Anwenden von CLAHE auf den L-Kanal
clahe = cv2.createCLAHE(clipLimit=3.0, tileGridSize=(8,8))
cl = clahe.apply(l)
cv2.imshow('CLAHE output', cl)

# Verbindet den CLAHE erweiterten L-Kanal mit dem a und b Kanal
limg = cv2.merge((cl,a,b))
cv2.imshow('limg', limg)

# # Konvertieren von Bildern vom LAB Farbmodell in das RGB Modell
final = cv2.cvtColor(limg, cv2.COLOR_LAB2BGR)
cv2.imshow('final', final)

Das 1k.jpg Bild zum testen oder ändert die Datei 1k.jpg gegen eine von euch.
   
[Bild: attachment.php?aid=2586]


[-] The following 1 user says Thank You to Manfred Aabye for this post:
  • Dorena Verne
Zitieren
#4
Möchtet ihr eine EXE Datei daraus erstellen, könnt ihr folgend vorgehen.

EXE Datei bauen mit pyinstaller wenn py2exe nicht funktioniert wie bei mir.

# Installation von pyinstaller
pip3 install pyinstaller

# Aufruf zum bau einer EXE
pyinstaller meineDatei.py -F

-F = Alles in eine Datei.

Nutzt ihr Visual Code und habt Probleme in dessen Konsole?
Python Version einstellen
Unter Datei - Einstellungen - Einstellungen (2 mal)
Suche in der Suchleiste Oben im Text nach: python.pythonPath
Dort den Pfad der Python EXE einstellen Beispiel:
C:\Python38\python.exe
Jetzt wird eure gewünschte Python Version genommen und nicht die von Visual Studio oder irgendeine andere.
[Bild: attachment.php?aid=2586]


Zitieren


Möglicherweise verwandte Themen…
Thema Verfasser Antworten Ansichten Letzter Beitrag
  L3DT - das Terrain Tool für Maulwürfe und solche die sich dafür halten Bogus Curry 4 4.119 25.03.2018, 22:18
Letzter Beitrag: Pharcide
  Fundsache Terrain Party, die reale Welt als Heightmap Manfred Aabye 13 16.068 13.12.2015, 00:02
Letzter Beitrag: Ezry Aldrin

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste