Coller le png avec le canal alpha comme une image transparente avec Python / OpenCV

TL; DR

Ceci est le code pour superposer png_image.png (image avec canal alpha) en haut à gauche de bg.jpg.

import cv2

frame = cv2.imread("bg.jpg ")
png_image = cv2.imread("alpha.png ", cv2.IMREAD_UNCHANGED)  #Lire avec canal alpha inclus

#Définition des coordonnées de destination du collage. Pour le moment, en haut à gauche
x1, y1, x2, y2 = 0, 0, png_image.shape[1], png_image.shape[0]

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

Bref commentaire

Le fichier PNG contient des données qui représentent la transparence de chaque pixel appelé «canal alpha». La plage de valeurs est comprise entre 0 et 255, ce qui est identique à RVB. Une valeur de 255 est valide à 100% et une valeur de 0 est de 0% (entièrement transparent).

png_image = cv2.imread("alpha.png ", cv2.IMREAD_UNCHANGED)  #Lire avec canal alpha inclus

Dans cv2.imread () normal, ce sera sous la forme de numpy.ndarray de [h, w, 3], mais avec cv2.IMREAD_UNCHANGED, cv2.imread () est spécifié. Lorsqu'il est appelé, il sera sous la forme «[h, w, 4]». «BGR» est «BGRA» et se termine par un canal alpha.

Après avoir chargé l'image, combinez-la. Cependant, il peut être synthétisé par le fonctionnement normal de la matrice de NuPy. Ce que nous faisons est d'allouer l'image de fond d'origine et l'image à dessiner par les valeurs numériques du canal alpha et de les ajouter ensemble.

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:] est la récupération du canal alpha. La plage du canal alpha est de 0 à 255, divisez donc par 255 pour obtenir un rapport de 0 à 1. Vous pouvez obtenir l'image finale en multipliant l'image à dessiner par le rapport calculé, en multipliant l'arrière-plan par le «restant» du rapport et en les additionnant.

Au fait, si vous écrivez png_image [:,:, 3], vous vous fâcherez si la taille de la matrice ne correspond pas (j'ai fait une erreur).

Exemple

bg.jpg bg_moon_sky_mangetsu_building.jpg

alpha.png stand_naname3_man.png

Le résultat de cv2.imwrite (" result.jpg ", frame) testout.jpg

Supplémentaire

Bien qu'il existe divers sites utiles, je n'ai pas trouvé le code qui convenait, alors j'ai fait un article. (C'est peut-être trop évident de l'écrire à la place)

Site auquel j'ai été autorisé à me référer

Pour l'image, j'ai utilisé le matériel de Cute Free Material Collection Irasutoya.

Recommended Posts

Coller le png avec le canal alpha comme une image transparente avec Python / OpenCV
Édition d'image avec python OpenCV
[Python] Utilisation d'OpenCV avec Python (filtrage d'image)
[Python] Utilisation d'OpenCV avec Python (transformation d'image)
Trouver la similitude d'image avec Python + OpenCV
Traitement d'image avec Python et OpenCV [Tone Curve]
Acquisition d'images depuis une caméra avec Python + OpenCV
Traitement d'image léger avec Python x OpenCV
J'ai essayé de "lisser" l'image avec Python + OpenCV
Convertir un PDF en image (JPEG / PNG) avec Python
J'ai essayé de "différencier" l'image avec Python + OpenCV
Comment recadrer une image avec Python + OpenCV
J'ai essayé de "binariser" l'image avec Python + OpenCV
[Petite histoire] Tester la génération d'images avec Python / OpenCV
[Python + OpenCV] Peignez la partie transparente de l'image en blanc
Binarisation avec OpenCV / Python
Traitement d'image avec Python
Génération d'images JPEG en spécifiant la qualité avec Python + OpenCV
Créez diverses vidéos Photoshop avec Python + OpenCV ② Créez une image fixe Photoshop
Traitement d'image avec Python (partie 2)
J'ai essayé la "correction gamma" de l'image avec Python + OpenCV
"Traitement Apple" avec OpenCV3 + Python3
Capture de caméra avec Python + OpenCV
Tri des fichiers image avec Python (2)
Tri des fichiers image avec Python (3)
Traitement d'image avec Python (partie 1)
Tweet avec image en Python
L'image en échelle de gris est affichée sous forme d'image couleur dans OpenCV / Python
Tri des fichiers image avec Python
Traitement d'image avec Python (3)
Détection de visage avec Python + OpenCV
Obtenez des fonctionnalités d'image avec OpenCV
Utiliser OpenCV avec Python @Mac
Reconnaissance d'image avec Keras + OpenCV
[Python] Lecture facile des fichiers image du numéro de série avec OpenCV
[Python] Traitement d'image avec scicit-image
Interpolation automatique des images avec OpenCV et Python (méthode de marche rapide, Navier-Stokes)
J'ai essayé de créer une fonction de similitude d'image avec Python + OpenCV
Briller la vie avec Python et OpenCV
Découpez une image avec python
Principes de base du traitement d'image en temps réel avec opencv
Réseau neuronal avec OpenCV 3 et Python 3
Traitement d'image avec la binarisation Python 100 knocks # 3
Programmation facile Python + OpenCV avec Canopy
Faisons du scraping d'images avec Python
Essayez la reconnaissance faciale avec python + OpenCV
Découpez le visage avec Python + OpenCV
Reconnaissance faciale avec caméra avec opencv3 + python2.7
Charger une image gif avec Python + OpenCV
Essayez de brouiller l'image avec opencv2
Utiliser OpenCV avec Python 3 dans Window
100 traitement d'image par Python Knock # 2 Échelle de gris
Dessinez une illustration avec Python + OpenCV
Introduction à l'analyse d'image opencv python
Suivre les balles de baseball avec Python + OpenCV
Segmentation basée sur un graphique avec Python + OpenCV
Envoyer l'image avec python et enregistrer avec php
Dessinez une flèche (vecteur) avec opencv / python
Etude de base d'OpenCV avec Python
Génération d'images dégradées avec Python [1] | np.linspace
Comment couper la partie inférieure droite de l'image avec Python OpenCV