Verwenden Sie OpenCV und Python programmgesteuert, um Schmutz und Kratzer von gescannten Fotos und unerwünschte Objekte von Standbildern und Videos zu entfernen.
Dieses Mal werde ich das elektrische Kabel löschen.
** ◎ Eingabebild **
** ◎ Maske **
** ◎ Ergebnis **
cv2.inpaint
inpaint(src, inpaintMask, inpaintRadius, flags[, dst]) -> dst
Eine Maske wird auf das Eingabebild angewendet, und der Maskenteil wird basierend auf dem Bild um die Maskengrenze nach innen interpoliert.
inpaint.py
# -*- coding: utf-8 -*-
import cv2
#Original Bild
img = cv2.imread('img.jpg')
#Maske
mask = cv2.imread('mask.png',0)
#Bildkorrektur
dst = cv2.inpaint(img, mask, 3, cv2.INPAINT_TELEA)
#dst = cv2.inpaint(img, mask, 3, cv2.INPAINT_NS)
#Anzeige
cv2.imshow('dst',dst)
cv2.waitKey(0)
cv2.destroyAllWindows()
#sparen
cv2.imwrite('result.jpg', dst)
OpenCV : 3.1.0 Python : 3.5.2
Informationen zum Erstellen der OpenCV- und Python-Umgebung finden Sie hier. (Link)
Da die Pixel in der Maske von den Pixeln um die Maske interpoliert werden, funktioniert es gut, wenn das Bild ein relativ flaches Gefühl um die Maske herum hat. Im Gegenteil, wenn die Umgebung komplizierte Muster sind, funktioniert es nicht. Wenn die Maske den zu löschenden Teil nicht vollständig maskiert, wird Rauschen angezeigt. Wenn es ein Problem mit der Form der Maske gab, könnte der Maskenteil wie ein Schwert aussehen.
Ähnliche Bildvorgänge sind mit PhotoShop möglich, müssen jedoch manuell ausgeführt werden. Mit OpenCV können Sie dies programmgesteuert tun, um es auf Videos anzuwenden. Zum Schutz der Privatsphäre können Sie es anscheinend auch verwenden, um Personen im Video automatisch zu extrahieren und diesen Teil automatisch mit dieser Methode zu ergänzen.
Recommended Posts