Fügen Sie mit Python / OpenCV PNG mit Alphakanal als transparentes Bild ein

TL; DR

Dies ist der Code zum Überlagern von png_image.png (Bild mit Alphakanal) oben links von bg.jpg.

import cv2

frame = cv2.imread("bg.jpg ")
png_image = cv2.imread("alpha.png ", cv2.IMREAD_UNCHANGED)  #Lesen Sie mit Alpha-Kanal enthalten

#Festlegen der Einfügezielkoordinaten. Vorerst oben links
x1, y1, x2, y2 = 0, 0, png_image.shape[1], png_image.shape[0]

#Synthetik!
frame[y1:y2, x1:x2] = frame[y1:y2, x1:x2] * (1 - png_image[:, :, 3:] / 255) + \
                      png_image[:, :, :3] * (png_image[:, :, 3:] / 255)

Kurzer Kommentar

Die PNG-Datei enthält Daten, die die Transparenz jedes Pixels darstellen, das als "Alpha-Kanal" bezeichnet wird. Der Wertebereich liegt zwischen 0 und 255, was RGB entspricht. Ein Wert von 255 ist zu 100% gültig und ein Wert von 0 ist zu 0% (vollständig transparent).

png_image = cv2.imread("alpha.png ", cv2.IMREAD_UNCHANGED)  #Lesen Sie mit Alpha-Kanal enthalten

In normalem "cv2.imread ()" wird es in Form von "numpy.ndarray" von "[h, w, 3]" vorliegen, aber mit "cv2.IMREAD_UNCHANGED" wird "cv2.imread ()" angegeben. Wenn es aufgerufen wird, hat es die Form "[h, w, 4]". BGR ist BGRA und endet mit einem Alpha-Kanal.

Kombinieren Sie das Bild nach dem Laden. Es kann jedoch durch den normalen Matrixbetrieb von NuPy synthetisiert werden. Wir ordnen das ursprüngliche Hintergrundbild und das zu zeichnende Bild den numerischen Werten des Alphakanals zu und addieren sie.

frame[y1:y2, x1:x2] = frame[y1:y2, x1:x2] * (1 - png_image[:, :, 3:] / 255) + \
                      png_image[:, :, :3] * (png_image[:, :, 3:] / 255)

png_image [:,:, 3:] ist das Abrufen des Alphakanals. Der Alpha-Kanalbereich liegt zwischen 0 und 255. Teilen Sie ihn durch 255, um ein Verhältnis von 0 bis 1 zu erhalten. Sie können das endgültige Bild erhalten, indem Sie das zu zeichnende Bild mit dem berechneten Verhältnis multiplizieren, den Hintergrund mit dem "Rest" des Verhältnisses multiplizieren und addieren.

Übrigens, wenn Sie png_image [:,:, 3] schreiben, werden Sie wütend, wenn die Größe der Matrix nicht übereinstimmt (ich habe einen Fehler gemacht).

Beispiel

bg.jpg bg_moon_sky_mangetsu_building.jpg

alpha.png stand_naname3_man.png

Das Ergebnis von cv2.imwrite (" result.jpg ", frame) testout.jpg

Extra

Obwohl es verschiedene nützliche Websites gibt, konnte ich den richtigen Code nicht finden und habe einen Artikel verfasst. (Vielleicht ist es zu offensichtlich, es stattdessen zu schreiben)

Site, auf die ich verweisen durfte

Für das Bild habe ich das Material von Cute Free Material Collection Irasutoya verwendet.

Recommended Posts

Fügen Sie mit Python / OpenCV PNG mit Alphakanal als transparentes Bild ein
Bildbearbeitung mit Python OpenCV
[Python] Verwenden von OpenCV mit Python (Bildfilterung)
[Python] Verwenden von OpenCV mit Python (Bildtransformation)
Finden Sie Bildähnlichkeit mit Python + OpenCV
Bildverarbeitung mit Python & OpenCV [Tonkurve]
Bildaufnahme von der Kamera mit Python + OpenCV
Leichte Bildverarbeitung mit Python x OpenCV
Ich habe versucht, das Bild mit Python + OpenCV zu "glätten"
Konvertieren Sie PDF in Bilder (JPEG / PNG) mit Python
Ich habe versucht, das Bild mit Python + OpenCV zu "differenzieren"
So beschneiden Sie ein Bild mit Python + OpenCV
Ich habe versucht, das Bild mit Python + OpenCV zu "binarisieren"
[Kleine Geschichte] Testen Sie die Bilderzeugung mit Python / OpenCV
[Python + OpenCV] Malen Sie den transparenten Teil des Bildes weiß
Binarisierung mit OpenCV / Python
Bildverarbeitung mit Python
JPEG-Bilderzeugung durch Angabe der Qualität mit Python + OpenCV
Erstellen verschiedener Photoshop-Videos mit Python + OpenCV ② Erstellen Sie Photoshop-Standbilder
Bildverarbeitung mit Python (Teil 2)
Ich habe versucht, das Bild mit Python + OpenCV "gammakorrektur" zu machen
"Apple-Verarbeitung" mit OpenCV3 + Python3
Kameraerfassung mit Python + OpenCV
Sortieren von Bilddateien mit Python (2)
Sortieren von Bilddateien mit Python (3)
Bildverarbeitung mit Python (Teil 1)
Tweet mit Bild in Python
Das Graustufenbild wird in OpenCV / Python als Farbbild angezeigt
Bilddateien mit Python sortieren
Bildverarbeitung mit Python (3)
Gesichtserkennung mit Python + OpenCV
Holen Sie sich Bildfunktionen mit OpenCV
Verwenden von OpenCV mit Python @Mac
Bilderkennung mit Keras + OpenCV
[Python] Mit OpenCV können Sie problemlos Bilddateien mit Seriennummern lesen
[Python] Bildverarbeitung mit Scicit-Image
Automatische Bildinterpolation mit OpenCV und Python (Fast Marching Method, Navier-Stokes)
Ich habe versucht, mit Python + OpenCV eine Bildähnlichkeitsfunktion zu erstellen
Leuchtendes Leben mit Python und OpenCV
Schneiden Sie ein Bild mit Python aus
Grundlagen der Echtzeit-Bildverarbeitung mit opencv
Neuronales Netzwerk mit OpenCV 3 und Python 3
Die Bildverarbeitung mit Python 100 klopft an die Binärisierung Nr. 3
Einfache Python + OpenCV-Programmierung mit Canopy
Lassen Sie uns mit Python Image Scraping durchführen
Versuchen Sie die Gesichtserkennung mit Python + OpenCV
Schneiden Sie das Gesicht mit Python + OpenCV aus
Gesichtserkennung mit Kamera mit opencv3 + python2.7
Laden Sie das GIF-Bild mit Python + OpenCV
Versuchen Sie, das Bild mit opencv2 zu verwischen
Verwenden Sie OpenCV mit Python 3 in Window
100 Bildverarbeitung mit Python Knock # 2 Graustufen
Zeichnen Sie eine Illustration mit Python + OpenCV
Einführung in die Bildanalyse opencv python
Verfolgen Sie Baseballbälle mit Python + OpenCV
Graphbasierte Segmentierung mit Python + OpenCV
Sende Bild mit Python und speichere mit PHP
Zeichnen Sie einen Pfeil (Vektor) mit opencv / python
Grundlegendes Studium von OpenCV mit Python
Erzeugung von Verlaufsbildern mit Python [1] | np.linspace
So schneiden Sie den unteren rechten Teil des Bildes mit Python OpenCV