Ich habe versucht, mit Python + opencv nicht realistisch zu rendern

Einführung

Ich habe das nicht fotorealistische Rendering (nicht fotorealistisches Rendering: NPR) ausprobiert, das in der opencv-Bibliothek bereitgestellt wird. NPR zielt auf unrealistische Ausdrücke wie handgezeichnete Gemälde auf den Eingabebildern und Videos ab. Bitte stellen Sie sich das tatsächliche Konvertierungsergebnis unten als Referenz vor.

Ich habe es mit Bezug auf diese Seite implementiert. OpenCV Non-Photorealistic Rendering Learn OpenCV

Ergebnis

Ich werde zuerst das Ausführungsergebnis von NPR veröffentlichen. Eingabe ist hier Snow Sakura

httpswww.pakutaso.com20200336089post-26662.html.jpg

NPR-Konvertierungsergebnis

detailEnhance detailEnhance.png

pencilSketch pencilSketch.png

stylization stylization.png

Implementierung

Unten ist der Python-Code.

NPR.py


import cv2
import argparse
from PIL import Image

def NPR(src):
    epf = cv2.edgePreservingFilter(src, flags=1, sigma_s=60, sigma_r=0.4)
    de = cv2.detailEnhance(src, sigma_s=10, sigma_r=0.15)
    pen_gray, pen_col = cv2.pencilSketch(src, sigma_s=60, sigma_r=0.1, shade_factor=0.03)
    style = cv2.stylization(src, sigma_s=60, sigma_r=0.07)
    return epf, de, pen_col, style

def webcam_or_pic2npr(out,is_webcam,pic):
    if is_webcam:
        cap = cv2.VideoCapture(0)

        while True:
            ret, frame = cap.read()
            e,d,p,s = NPR(frame)
            cv2.imshow('raw_input', frame)
            cv2.imshow('edgePreservingFilter',e)
            cv2.imshow('detailEnhance',d)
            cv2.imshow('pencilSketch',p)
            cv2.imshow('stylization',s)

            key = cv2.waitKey(1) & 0xFF
            if key == ord('q'):
                break
            elif key == ord('s'):
                cv2.imwrite(out,frame)
                cv2.imwrite(out,p)
        cap.release()
        cv2.destroyAllWindows()
    else:
        img = cv2.imread(pic, cv2.IMREAD_COLOR)
        e,d,p,s = NPR(img)
        cv2.imwrite(str(out)+'edgePreservingFilter.png',e)
        cv2.imwrite(str(out)+'detailEnhance.png',d)
        cv2.imwrite(str(out)+'pencilSketch.png',p)
        cv2.imwrite(str(out)+'stylization.png',s)

def main():
    parser = argparse.ArgumentParser(description='python+opencv_npr')
    parser.add_argument('--in_pic','-i',default='sample.png',help='input_picture_name')
    parser.add_argument('--out','-o',default='./',help='output_dir')
    parser.add_argument('--is_webcam',action='store_true',help='use webwebcam_or_pic2npr')
    args = parser.parse_args()
    webcam_or_pic2npr(args.out, args.is_webcam, args.in_pic)

if __name__ == "__main__":
    main()

Ausführungsbefehl (Eingabe = Bild)

python NPR.py -i picture_name -o output_dir 

Ausführungsbefehl (Eingabe = Webkamera)

python NPR.py --is_webcam

Impressionen

Es kann leicht mit Python und OpenCV implementiert werden. Details der Logik der vier Arten von Bibliotheken werden hinzugefügt, wenn Zeit vorhanden ist. Wenn Sie verschiedene Dinge ausprobieren, können Sie feststellen, dass das Bild scharf oder unscharf ist.

Zusammenfassung

Ich habe 4 Arten von unrealistischem Rendering mit Python + OpenCV ausprobiert. Bitte versuchen Sie es mit dem Bild zur Hand. Danke fürs Lesen. Wir würden uns freuen, wenn Sie auf Ungerechtigkeiten im Quellcode hinweisen könnten. LGTM ist auch willkommen!

Recommended Posts

Ich habe versucht, mit Python + opencv nicht realistisch zu rendern
Ich habe fp-Wachstum mit Python versucht
Ich habe versucht, mit Python zu kratzen
Ich habe versucht, das Bild mit Python + OpenCV zu "differenzieren"
Ich habe versucht, das Bild mit Python + OpenCV zu "binarisieren"
Ich habe gRPC mit Python ausprobiert
Ich habe versucht, mit Python zu kratzen
[OpenCV / Python] Ich habe versucht, Bilder mit OpenCV zu analysieren
Ich habe versucht, das Bild mit Python + OpenCV "morphologisch zu konvertieren"
Ich habe versucht, WebScraping mit Python.
Ich habe versucht, Prolog mit Python 3.8.2 auszuführen.
Ich habe die SMTP-Kommunikation mit Python versucht
Ich habe versucht, das Gesicht mit OpenCV zu erkennen
Ich habe versucht, das Bild mit Python + OpenCV "gammakorrektur" zu machen
Ich habe eine funktionale Sprache mit Python ausprobiert
Ich habe versucht, mit Python ② (Fibonacci-Zahlenfolge) aufzuklären.
# Ich habe so etwas wie Vlookup mit Python # 2 ausprobiert
Ich habe versucht, mit Python + OpenCV eine Bildähnlichkeitsfunktion zu erstellen
Binarisierung mit OpenCV / Python
Ich habe Python> autopep8 ausprobiert
Ich habe Python> Decorator ausprobiert
Ich habe Hunderte Millionen SQLite mit Python ausprobiert
Ich habe versucht, Objekte mit Python und OpenCV zu erkennen
Ich habe versucht, mit OpenCV Bewegungen schnell zu erkennen
Ich habe L-Chika mit Razpai 4 (Python Edition) ausprobiert.
Ich habe Jacobian und teilweise Differenzierung mit Python versucht
Ich habe versucht, CloudWatch-Daten mit Python abzurufen
Ich habe versucht, Mecab mit Python2.7, Ruby2.3, PHP7 zu verwenden
Ich habe Funktionssynthese und Curry mit Python versucht
Ich habe versucht, LLVM IR mit Python auszugeben
Ich habe versucht, mit Python Faiss zu laufen, Go, Rust
Ich habe versucht, die Herstellung von Sushi mit Python zu automatisieren
Ich habe versucht, Deep Floor Plan mit Python 3.6.10 auszuführen.
Ich habe versucht, eine E-Mail mit SendGrid + Python zu senden
"Apple-Verarbeitung" mit OpenCV3 + Python3
Ich habe versucht, Funktionen mit SIFT von OpenCV zu extrahieren
Bildbearbeitung mit Python OpenCV
Ich habe versucht, mit Elasticsearch Ranking zu lernen!
Kameraerfassung mit Python + OpenCV
Ich habe versucht, Mine Sweeper auf dem Terminal mit Python zu implementieren
Ich habe versucht, mit Blenders Python script_Part 01 zu beginnen
Ich habe einen Blackjack mit Python gemacht!
[Python] Verwenden von OpenCV mit Python (Basic)
Ich habe versucht, mit PyCaret zu clustern
Ich habe versucht, Soma Cube mit Python zu lösen
Ich habe versucht, mit Blenders Python script_Part 02 zu beginnen
Ich habe versucht, künstliches Perzeptron mit Python zu implementieren
Gesichtserkennung mit Python + OpenCV
Ich habe die C-Erweiterung von Python ausprobiert
Mayungos Python-Lernfolge 1: Ich habe versucht, mit Druck zu drucken
Ich habe versucht, das Problem mit Python Vol.1 zu lösen
Ich habe mit Python einen Blackjack gemacht.
Ich habe Wordcloud mit Python gemacht.