Terrain aus Bildern - Manfred Aabye - 21.07.2020
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
RE: Terrain aus Bildern - Xenos Yifu - 21.07.2020
Cool, muss ich mal ausprobieren.
RE: Terrain aus Bildern - Manfred Aabye - 26.07.2020
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.
RE: Terrain aus Bildern - Manfred Aabye - 01.08.2020
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.
|