J'ai essayé le rendu non réaliste avec Python + opencv

introduction

J'ai essayé le rendu non photoréaliste (rendu non photoréaliste: NPR) fourni dans la librairie opencv. NPR vise des expressions non réalistes telles que des peintures dessinées à la main sur les images et vidéos d'entrée. Veuillez imaginer le résultat réel de la conversion ci-dessous comme référence.

Je l'ai implémenté en référence à ce site. OpenCV Non-Photorealistic Rendering Learn OpenCV

résultat

Je publierai d'abord le résultat de l'exécution de NPR. L'entrée est ici Snow Sakura

httpswww.pakutaso.com20200336089post-26662.html.jpg

Résultat de la conversion NPR

detailEnhance detailEnhance.png

pencilSketch pencilSketch.png

stylization stylization.png

la mise en oeuvre

Voici le code Python.

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()

Commande d'exécution (entrée = image)

python NPR.py -i picture_name -o output_dir 

Commande d'exécution (entrée = webcam)

python NPR.py --is_webcam

Impressions

Il peut être facilement implémenté avec python et opencv. Des détails sur la logique des quatre types de bibliothèques seront ajoutés s'il y a du temps. Si vous essayez différentes choses, vous pouvez voir que l'image est nette ou floue.

Résumé

J'ai essayé 4 types de rendu non réalistes avec python + opencv. Veuillez l'essayer avec l'image à portée de main. Merci pour la lecture. Nous vous serions reconnaissants si vous pouviez signaler toute injustice dans le code source. LGTM est également le bienvenu!

Recommended Posts

J'ai essayé le rendu non réaliste avec Python + opencv
J'ai essayé fp-growth avec python
J'ai essayé de gratter avec Python
J'ai essayé de "différencier" l'image avec Python + OpenCV
J'ai essayé de "binariser" l'image avec Python + OpenCV
J'ai essayé gRPC avec Python
J'ai essayé de gratter avec du python
[OpenCV / Python] J'ai essayé l'analyse d'image de cellules avec OpenCV
J'ai essayé la "conversion de morphologie" de l'image avec Python + OpenCV
J'ai essayé webScraping avec python.
J'ai essayé d'exécuter prolog avec python 3.8.2.
J'ai essayé la communication SMTP avec Python
J'ai essayé la reconnaissance faciale avec OpenCV
J'ai essayé la "correction gamma" de l'image avec Python + OpenCV
J'ai essayé un langage fonctionnel avec Python
J'ai essayé la récurrence avec Python ② (séquence de nombres Fibonatch)
# J'ai essayé quelque chose comme Vlookup avec Python # 2
J'ai essayé de créer une fonction de similitude d'image avec Python + OpenCV
Binarisation avec OpenCV / Python
J'ai essayé Python> autopep8
J'ai essayé Python> décorateur
J'ai essayé des centaines de millions de SQLite avec python
J'ai essayé la détection d'objets en utilisant Python et OpenCV
J'ai essayé de détecter rapidement un mouvement avec OpenCV
J'ai essayé L-Chika avec Razpai 4 (édition Python)
J'ai essayé la différenciation jacobienne et partielle avec python
J'ai essayé d'obtenir des données CloudWatch avec Python
J'ai essayé d'utiliser mecab avec python2.7, ruby2.3, php7
J'ai essayé la synthèse de fonctions et le curry avec python
J'ai essayé de sortir LLVM IR avec Python
J'ai essayé d'exécuter faiss avec python, Go, Rust
J'ai essayé d'automatiser la fabrication des sushis avec python
J'ai essayé d'exécuter Deep Floor Plan avec Python 3.6.10.
J'ai essayé d'envoyer un email avec SendGrid + Python
"Traitement Apple" avec OpenCV3 + Python3
J'ai essayé d'extraire des fonctionnalités avec SIFT d'OpenCV
Édition d'image avec python OpenCV
J'ai essayé Learning-to-Rank avec Elasticsearch!
Capture de caméra avec Python + OpenCV
J'ai essayé d'implémenter Mine Sweeper sur un terminal avec python
J'ai essayé de démarrer avec le script python de blender_Part 01
J'ai fait un blackjack avec du python!
[Python] Utilisation d'OpenCV avec Python (basique)
J'ai essayé le clustering avec PyCaret
J'ai essayé de résoudre Soma Cube avec python
J'ai essayé de démarrer avec le script python de blender_Partie 02
J'ai essayé d'implémenter le perceptron artificiel avec python
Détection de visage avec Python + OpenCV
J'ai essayé l'extension C de Python
Mayungo's Python Learning Episode 1: J'ai essayé d'imprimer avec impression
J'ai essayé de résoudre le problème avec Python Vol.1
J'ai fait un blackjack avec Python.
J'ai créé wordcloud avec Python.