Erstellen Sie mit OpenCV und Python (Mertens, Robertson, Debevec) ein High Dynamic Range Image (HDR).

Einführung

Wenn Sie mit einem Smartphone oder einer Digitalkamera in einem dunklen Raum mit starkem Kontrast wie Dämmerung, Nachtansicht, Hintergrundbeleuchtung oder Außenlicht aufnehmen, ist der helle Teil möglicherweise weiß oder der dunkle Teil schwarz. Wurdest du jemals enttäuscht? Dies ist ein Phänomen, das auftritt, weil die Abstufung in hellen und dunklen Bereichen unzureichend ist. Dieses Mal werde ich ein Bild mit hohem Dynamikbereich erstellen, indem ich ein helles und ein dunkles Bild auf gute Weise synthetisiere.

Umgebung

Informationen zum Bau der Umgebung finden Sie ab sofort hier. Umgebungskonstruktion von OpenCV 3 und Python 3

Bild vor der Verarbeitung

サムネイル.png

Drei JPEG-Bilder mit zwei verschiedenen Belichtungen. Für eine schöne Komposition wird empfohlen, die Kamera zu fixieren, die Blende gleich einzustellen, nur die Belichtungszeit zu ändern und kontinuierlich zu fotografieren.

Nach der HDR-Verarbeitung

Bild von OpenCV verarbeitet.

Programm

hdr.py


# -*- coding: utf-8 -*-
import cv2
import numpy as np

#Lesen Sie 3 Bilddateien
img_fn = ["img1.jpg ", "img2.jpg ", "img3.jpg "]
img_list = [cv2.imread(fn) for fn in img_fn]

#Stellen Sie die Belichtungszeit für 3 Bilder ein
exposure_times = np.array([0.2, 0.05, 0.0125], dtype=np.float32)

#HDR-Synthese nach der Debevec-Methode
merge_debvec = cv2.createMergeDebevec()
hdr_debvec = merge_debvec.process(img_list, times=exposure_times.copy())
tonemap1 = cv2.createTonemapDurand(gamma=2.2)
res_debvec = tonemap1.process(hdr_debvec.copy())

#HDR-Synthese nach der Robertson-Methode
merge_robertson = cv2.createMergeRobertson()
hdr_robertson = merge_robertson.process(img_list, times=exposure_times.copy())
tonemap2 = cv2.createTonemapDurand(gamma=2.2)
res_robertson = tonemap2.process(hdr_robertson.copy())

#HDR-Synthese nach der Mertens-Methode
merge_mertens = cv2.createMergeMertens()
res_mertens = merge_mertens.process(img_list)

#In 8-Bit-Daten konvertieren
res_debvec_8bit = np.clip(res_debvec*255, 0, 255).astype('uint8')
res_robertson_8bit = np.clip(res_robertson*255, 0, 255).astype('uint8')
res_mertens_8bit = np.clip(res_mertens*255, 0, 255).astype('uint8')

#Bild in Datei speichern
cv2.imwrite("ldr_debvec.jpg ", res_debvec_8bit)
cv2.imwrite("ldr_robertson.jpg ", res_robertson_8bit)
cv2.imwrite("fusion_mertens.jpg ", res_mertens_8bit)

Wenn die Anzahl der Fotos 3 und die Belichtung -2, 0, +2 beträgt, ist dies wie folgt. img_fn = ["img1.jpg ", "img2.jpg ", "img3.jpg "] exposure_times = np.array([0.2, 0.05, 0.0125], dtype=np.float32)

Wenn Sie 5 Fotos haben und die Belichtung -2, -1, 0, +1, +2 beträgt, ändern Sie diesen Teil wie folgt. img_fn = ["img1.jpg ", "img2.jpg ", "img3.jpg ", "img4.jpg ", "img5.jpg "] exposure_times = np.array([0.2, 0.1, 0.05, 0.025, 0.0125], dtype=np.float32)

abschließend

Dieses Mal konnten wir mit der Martens-Methode ein leistungsstarkes Bild ohne Parameteranpassung synthetisieren. Ich habe verschiedene Dinge mit anderen Beispielbildern [1] ausprobiert, aber unter den dreien sah die Martens-Methode am besten aus. .. Als HDR-bezogene Funktionen bietet OpenCV auch Funktionen zur Anpassung der Tonkarte (Drago, Durand, Reinhard, Mantiuk) und Kalibrierungsfunktionen (Debevec, Robertson). Ich habe festgestellt, dass OpenCV für eine automatische und ziemlich gute Komposition verwendet werden kann, daher möchte ich es in einigen Fällen verwenden.

Recommended Posts

Erstellen Sie mit OpenCV und Python (Mertens, Robertson, Debevec) ein High Dynamic Range Image (HDR).
Erstellen Sie eine gestreifte Illusion mit Gammakorrektur für Python3 und openCV3
Erstellen Sie mit Python + PIL ein Dummy-Image.
Hinweise zur HDR- und RAW-Bildverarbeitung mit Python
Erstellen verschiedener Photoshop-Videos mit Python + OpenCV ② Erstellen Sie Photoshop-Standbilder
Bildbearbeitung mit Python OpenCV
Erstellen Sie ein Verzeichnis mit Python
Erstellen Sie eine WEB-Überwachungskamera mit Raspberry Pi und OpenCV
Lassen Sie uns ein PRML-Diagramm mit Python, Numpy und matplotlib erstellen.
Erstellen Sie mit python wxpython + openCV ein einfaches Videoanalysetool
Leuchtendes Leben mit Python und OpenCV
Automatische Bildinterpolation mit OpenCV und Python (Fast Marching Method, Navier-Stokes)
[Python] Verwenden von OpenCV mit Python (Bildfilterung)
Neuronales Netzwerk mit OpenCV 3 und Python 3
[Python] Verwenden von OpenCV mit Python (Bildtransformation)
So erstellen Sie eine Überwachungskamera (Überwachungskamera) mit Opencv und Python
Erstellen Sie mit Python und OpenCV ein einfaches OMR (Mark Sheet Reader)
Erstellen Sie einen einfachen geplanten Stapel mit Dockers Python Image und parse-crontab
Zeichnen Sie eine Aquarellillusion mit Kantenerkennung in Python3 und openCV3
Finden Sie Bildähnlichkeit mit Python + OpenCV
Erstellen Sie mit Python + OpenCV Ihre eigene virtuelle Kamera und wenden Sie Originaleffekte an
[Python] Erstellen Sie einen Linebot, um den Namen und das Alter auf das Bild zu schreiben
Erstellen Sie eine Python3-Umgebung mit pyenv auf einem Mac und zeigen Sie NetworkX-Diagramme an
Erstellen Sie mit Python einen Entscheidungsbaum von 0 und verstehen Sie ihn (5. Information Entropy)
Erstellen Sie mit Class einen Python-Funktionsdekorator
[Python] Erstellen Sie mit Anaconda eine virtuelle Umgebung
Erstellen wir mit Python eine kostenlose Gruppe
Bilder mit Pupil, Python und OpenCV aufnehmen
Ein Memo mit Python2.7 und Python3 in CentOS
Bildverarbeitung mit Python & OpenCV [Tonkurve]
Erstellen und entschlüsseln Sie Caesar-Code mit Python
Bildaufnahme von der Kamera mit Python + OpenCV
Erstellen verschiedener Photoshop-Videos mit Python + OpenCV ③ Erstellen Sie verschiedene Photoshop-Videos
Erstellen Sie mit Python 3.4 einen Worthäufigkeitszähler
Leichte Bildverarbeitung mit Python x OpenCV
Testen Sie das Hochladen von Bildern, indem Sie in Python erstellen, ohne Dummy-Bilddateien in Django zu platzieren
Erstellen wir ein einfaches Empfangssystem mit dem serverlosen Python-Framework Chalice und Twilio
[Python] So erstellen Sie eine lokale Webserverumgebung mit SimpleHTTPServer und CGIHTTPServer
Hallo Welt- und Gesichtserkennung mit OpenCV 4.3 + Python
Erstellen Sie mit tkinter [Python] einen Rahmen mit transparentem Hintergrund.
Erstellen einer Python-Umgebung mit virtualenv und direnv
Ich habe versucht, das Bild mit Python + OpenCV zu "differenzieren"
Erstellen eines Hintergrundbilds mit Tupfen mit der Python-Bildbibliothek
Erstellen Sie mit Minette für Python einen LINE BOT
[Verschiedene Bildanalysen mit Plotly] Dynamische Visualisierung mit Plotly [Python, Bild]
So beschneiden Sie ein Bild mit Python + OpenCV
Erstellen Sie eine virtuelle Umgebung mit conda in Python
Erstellen Sie eine Seite, die unbegrenzt mit Python geladen wird
[Hinweis] Erstellen Sie mit Python eine einzeilige Zeitzonenklasse
Sie können auch mit Python problemlos eine GUI erstellen
Erstellen Sie mit Sublime Text3 eine Python3-Build-Umgebung
Erstellen Sie eine Webmap mit Python und GDAL
Erstellen Sie eine Farbleiste mit Python + Qt (PySide)
Ich habe versucht, das Bild mit Python + OpenCV zu "binarisieren"
Erstellen Sie ein Bild mit Zeichen mit Python (Japanisch)
Schritte zum Erstellen eines Twitter-Bots mit Python
Starten Sie einen Webserver mit Python und Flask
Erstellen Sie mit Python einen Entscheidungsbaum von 0 (1. Übersicht)