Erstellen verschiedener Photoshop-Videos mit Python + OpenCV ② Erstellen Sie Photoshop-Standbilder

0. Einleitung

Es ist eine Fortsetzung vom letzten Mal (Teil 1 Gesichtserkennung). Überschreiben Sie das zuvor erkannte Gesicht mit einem anderen Bild. Ich habe auf die folgende Seite verwiesen. Bildverarbeitung mit Python + Opencv 5 (Größe ändern) Lachenden Mann im Gesicht mit Python + OpenCV + Kissen überschreiben

Das zu überschreibende Bild ist schließlich dieses. Lachende Männerteile

1. Bildgröße ändern

Da die Größe des erkannten Gesichts und die Größe des zu überschreibenden Bildes unterschiedlich sind, erstellen Sie mit der Funktion resize () von OpenCV eine Funktion zum Ändern der Bildgröße. Wenn Sie das Bild und die geänderte Größe angeben, wird es entsprechend erweitert und verkleinert. Ich wollte das Seitenverhältnis des Originalbilds nicht ändern, daher wird es entsprechend dem kleineren Größenunterschied (Verhältnis) erweitert und verkleinert. Unten ist der Code.

resize_image


def resize_image(image, height, width):
    
    #Holen Sie sich die Originalgröße
    org_height, org_width = image.shape[:2]
    
    #Schrumpfen, um der größeren Größe zu entsprechen
    if float(height)/org_height > float(width)/org_width:
        ratio = float(height)/org_height
    else:
        ratio = float(width)/org_width
    
    #Größe ändern
    resized = cv2.resize(image,(int(org_height*ratio),int(org_width*ratio)))
    
    return resized    

2. Ändern Sie die Größe des Ergebnisses

Lassen Sie uns die Größenänderungsfunktion testen. Ich habe versucht, es 100 x 100 groß zu machen.

resizetest


    #Laden des Bildes zum Überschreiben
    ol_imgae_path = "target/warai_otoko.png "    
    ol_image = cv2.imread(ol_imgae_path,cv2.IMREAD_UNCHANGED)   #Alpha-Kanal(Transparent)IMREAD zu lesen_Geben Sie INCHANGED an

    #Größe ändern
    resized_image = resize_image(ol_image, 100, 100)

    #Ausgabe des Erkennungsergebnisses
    cv2.imwrite("result/warai_otoko_result.png ", resized_image)

Before warai_otoko.png

After warai_otoko_result.png

Ich konnte es erfolgreich reduzieren.

3. Erstellen Sie eine Funktion zum Überschreiben des Bildes

Überschreiben Sie das Bild auf dem Gesichtsteil. Erstellen Sie eine Funktion, die ein Bild an einer bestimmten Position mithilfe einer Bibliothek namens Pillow (PIL) synthetisiert. Der Fluss ist -Konvertieren Sie Bilder vom OpenCV-Format in das PIL-Format ・ Mit Overlay-Bild überschreiben

overlayOnPart


import numpy as np
from PIL import Image

def overlayOnPart(src_image, overlay_image, posX, posY):

    #Ermitteln Sie die Größe des Überlagerungsbilds
    ol_height, ol_width = overlay_image.shape[:2]

    #Konvertieren Sie OpenCV-Bilddaten in PIL
    #Konvertieren Sie von BGRA zu RGBA
    src_image_RGBA = cv2.cvtColor(src_image, cv2.COLOR_BGR2RGB)
    overlay_image_RGBA = cv2.cvtColor(overlay_image, cv2.COLOR_BGRA2RGBA)
    
    #In PIL konvertieren
    src_image_PIL=Image.fromarray(src_image_RGBA)
    overlay_image_PIL=Image.fromarray(overlay_image_RGBA)

    #Wechseln Sie zum Compositing in den RGBA-Modus
    src_image_PIL = src_image_PIL.convert('RGBA')
    overlay_image_PIL = overlay_image_PIL.convert('RGBA')

    #Bereiten Sie einen transparenten Campus derselben Größe vor
    tmp = Image.new('RGBA', src_image_PIL.size, (255, 255,255, 0))
    #Überschreiben Sie den vorbereiteten Campus
    tmp.paste(overlay_image_PIL, (posX, posY), overlay_image_PIL)
    #Kombinieren Sie Original und Campus und speichern Sie
    result = Image.alpha_composite(src_image_PIL, tmp)
    
    return  cv2.cvtColor(np.asarray(result), cv2.COLOR_RGBA2BGRA)

4. Eingebaute Überschreibfunktion

Ich werde einen lachenden Mann auf das Gesicht des Lenna-Bildes setzen, das ich das letzte Mal erkannt habe. Das Laden von Bildern zum Überschreiben der vorherigen Quelle wurde hinzugefügt. Überschreiben Sie das Gesicht, nachdem Sie es verkleinert haben, um es an die Größe des Gesichts anzupassen.

overlay_face


#coding=utf-8

import cv2
import numpy as np
from PIL import Image


def overlay_face():

    #Lesen der erkannten Datei
    image_path = "target/Lenna.png "
    image = cv2.imread(image_path)

    #Laden des Bildes zum Überschreiben
    ol_imgae_path = "target/warai_otoko.png "    
    ol_image = cv2.imread(ol_imgae_path,cv2.IMREAD_UNCHANGED)   #Alpha-Kanal(Transparent)IMREAD zu lesen_Geben Sie INCHANGED an
 
    #In Graustufen konvertieren
    image_gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

    #Dateispezifikation des Funktionsumfangs für die Gesichtserkennung
    cascade_path = "haarcascades/haarcascade_frontalface_alt.xml"
    #Ermitteln Sie die Merkmalsmenge des Kaskadenklassifikators
    cascade = cv2.CascadeClassifier(cascade_path)

    #Gesichtserkennung durchführen
    facerecog = cascade.detectMultiScale(image_gray, scaleFactor=1.1, minNeighbors=1, minSize=(1, 1))

  
    if len(facerecog) > 0:


        #Überschreiben Sie das Bild auf allen erkannten Gesichtern
        for rect in facerecog:

            #Erkennungsergebnis anzeigen
            print ("Erkennungsergebnis")
            print ("(x,y)=(" + str(rect[0]) + "," + str(rect[1])+ ")" + \
                "Höhe:"+str(rect[2]) + \
                "Breite:"+str(rect[3]))

            #Passen Sie die Bildgröße an den Erkennungsbereich an
            resized_ol_image = resize_image(ol_image, rect[2], rect[3])
            
            #Erstellen eines überschriebenen Bildes
            image = overlayOnPart(image, resized_ol_image, rect[0], rect[1])
    
    #Ausgabe des Erkennungsergebnisses
    cv2.imwrite("result/Lenna_result.png ", image)


if __name__ == '__main__':
    overlay_face()

5. Ergebnis überschreiben

Lenna_result.png

Es ging gut.

6. Schließlich

Jetzt, da Sie ein Standbild in Photoshop erstellen können, Ab dem nächsten Mal werde ich es auf Videos anwenden. Verschiedene Photoshop-Videos mit Python + OpenCV erstellen ③ Verschiedene Photoshop-Videos erstellen

Recommended Posts

Erstellen verschiedener Photoshop-Videos mit Python + OpenCV ② Erstellen Sie Photoshop-Standbilder
Erstellen verschiedener Photoshop-Videos mit Python + OpenCV ③ Erstellen Sie verschiedene Photoshop-Videos
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
Erstellen Sie mit Python + PIL ein Dummy-Image.
Leichte Bildverarbeitung mit Python x OpenCV
Ich habe versucht, das Bild mit Python + OpenCV zu "glätten"
Ich habe versucht, das Bild mit Python + OpenCV zu "differenzieren"
Erstellen eines Hintergrundbilds mit Tupfen mit der Python-Bildbibliothek
Ich habe versucht, das Bild mit Python + OpenCV zu "binarisieren"
Erstellen Sie ein Bild mit Zeichen mit Python (Japanisch)
[Kleine Geschichte] Testen Sie die Bilderzeugung mit Python / OpenCV
Erstellen Sie mit Python eine Datei im Photoshop-Format (.psd)
Binarisierung mit OpenCV / Python
Bildverarbeitung mit Python
[OpenCV / Python] Ich habe versucht, Bilder mit OpenCV zu analysieren
JPEG-Bilderzeugung durch Angabe der Qualität mit Python + OpenCV
Erstellen Sie mit OpenCV und Python (Mertens, Robertson, Debevec) ein High Dynamic Range Image (HDR).
"Apple-Verarbeitung" mit OpenCV3 + Python3
Kameraerfassung mit Python + OpenCV
Erstellen Sie ein 3D-GIF mit Python3
[Python] Verwenden von OpenCV mit Python (Basic)
Sortieren von Bilddateien mit Python (3)
Erstellen Sie den Image Viewer mit Tkinter
Bilddateien mit Python sortieren
Holen Sie sich Bildfunktionen mit OpenCV
Erstellen Sie ein Verzeichnis mit Python
Verwenden von OpenCV mit Python @Mac
Bilderkennung mit Keras + OpenCV
[Python] Bildverarbeitung mit Scicit-Image
Fügen Sie mit Python / OpenCV PNG mit Alphakanal als transparentes Bild ein
Erstellen Sie mit python wxpython + openCV ein einfaches Videoanalysetool
[Python] Mit OpenCV können Sie problemlos Bilddateien mit Seriennummern lesen
Leuchtendes Leben mit Python und OpenCV
Schneiden Sie ein Bild mit Python aus
Grundlagen der Echtzeit-Bildverarbeitung mit opencv
Erstellen Sie eine Plotanimation mit Python + Matplotlib
Erstellen Sie Awaitable mit der Python / C-API
Neuronales Netzwerk mit OpenCV 3 und Python 3
[Python] Verwenden von OpenCV mit Python (Kantenerkennung)
Erstellen Sie eine gestreifte Illusion mit Gammakorrektur für Python3 und openCV3
Erstellen Sie eine virtuelle Umgebung mit Python!
Die Bildverarbeitung mit Python 100 klopft an die Binärisierung Nr. 3
Einfache Python + OpenCV-Programmierung mit Canopy
Animieren Sie mehrere Standbilder mit Python
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
Mit Python und OpenCV lassen Sie Unschärfevideos wie Festkommakameras aussehen
Einführung in die Bildanalyse opencv python
Verfolgen Sie Baseballbälle mit Python + OpenCV