Mit Python und OpenCV lassen Sie Unschärfevideos wie Festkommakameras aussehen

Frühere Geschichte

Eine Geschichte über Kameraverwacklungsvideos, die wie eine Festkommakamera OpenCV | Digital Creative Super Software Tokyo korrigiert wurden

Ich habe nach der obigen Seite gesucht, weil ich die vom Wind geschüttelte Festkommakamera korrigieren wollte. Da ich den Beispielcode jedoch nicht finden konnte, habe ich ihn in Python geschrieben.

Was ich benutzt habe

Code

Ich behandle keine Fehler. Ich denke auch, dass es in Ordnung ist, weil es funktioniert hat, so dass die Verwendung der wesentlichen Funktion möglicherweise falsch ist.

findTransformECC_test.py


# -*- coding: utf-8 -*-
import cv2
import numpy as np

#Vier CC-Bezeichnung
#fourcc = "DIB "
fourcc = "XVID"

#Spezifikation der Konvertierungsmethode (?)
#warp_type = cv2.MOTION_AFFINE
#warp_type = cv2.MOTION_EUCLIDEAN
#warp_type = cv2.MOTION_TRANSLATION
warp_type = cv2.MOTION_HOMOGRAPHY

#Bild vertikal und horizontal ausgeben 1/2 Größen (Bereich 1)/4) einstellen
scale = 2

#Stellen Sie WarpMatrix und die Konvertierungsfunktion ein
if warp_type == cv2.MOTION_HOMOGRAPHY:
    warp = np.eye(3,3,dtype=np.float32)
    warpTransform = cv2.warpPerspective
else:
    warp = np.eye(2,3,dtype=np.float32)
    warpTransform = cv2.warpAffine

#Video eingeben
cap = cv2.VideoCapture(r'./test.mp4')

#Erhalten Sie Erfassungsinformationen und erstellen Sie Ausgabeinformationen
fps = cap.get(cv2.CAP_PROP_FPS)
size = cap.get(cv2.CAP_PROP_FRAME_WIDTH), cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
size = tuple(map(lambda x: int(x / scale), size))

#Holen Sie sich das Referenzbild
ret, base = cap.read()
base = cv2.resize(base, size)
base = cv2.cvtColor(base, cv2.COLOR_BGR2GRAY)

#Ausgabeziel
video1 = cv2.VideoWriter("./out1.avi", cv2.VideoWriter_fourcc(*fourcc), fps, size)

while True:

    #Holen Sie sich Rahmen
    ret, frame = cap.read()
    if not ret:
        break
    frame = cv2.resize(frame, size)
    tmp = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    cv2.findTransformECC(tmp, base, warp, warp_type)

    #Ausgabe ist Originalbild (Farbbild)
    out = warpTransform(frame, warp, size)

    #Anzeige und Ausgabe an AVI
    cv2.imshow("", out)
    video1.write(out)

    k = cv2.waitKey(1)
    if k in [27, ord('q')]:
        #Zum Abschluss drücken Sie die ESC- oder Q-Taste
        break

#Veröffentlichung
cap.release()
video1.release()
cv2.destroyAllWindows()

** Nachtrag ** Ich habe wrap_type in warp_type geändert und es in das Argument von findTransfomrECC eingefügt. ** Nachtrag zu hier **

Wo es passt

Ich kann import cv2.cv (?) Nicht verwenden. Daher blieb ich beim Ersetzen des Teils der Netzbeispielquelle mit dem cv -Paket wie cv2.cv.CreateMat für warpMatrix hängen. ..

warpMatrix Fehlercode

warpMatrix must be single-channel floating-point matrix in function cv::findTransformECC


 Es war erfrischend (ich dachte immer, ich hätte einen Float angegeben!), Aber es war einfach, "dtype" anzugeben.

 FourCC
 Wenn dies auch das Netz ist, könnte ich es nicht nur mit der von `cv2.cv.CV_FOURCC` angegebenen Methode verwenden.
 Was wäre, wenn NeoComplete, das ergänzende Plug-In von Vim, mir nicht "VideoWriter_fourcc" sagen würde ...
 Ich fand [hier](http://stackoverflow.com/questions/15584608/python-opencv2-cv2-cv-fourcc-not-working-with-videowriterb) später.

# Worüber ich mir immer noch Sorgen mache
 ――Ich bin der Meinung, dass die Beziehung zwischen dem ersten und dem zweiten Argument von `findTransformECC` das Gegenteil ist.
 + Aber ist es richtig, wenn man das Argument von "warpAffine" berücksichtigt?

# Zusätzlicher Einfallsreichtum
 Obwohl die Größe der oben genannten Quelle geändert wird, zielt sie auf das gesamte Bild ab. Wenn ein sich bewegendes Objekt im Video groß erscheint, wird es möglicherweise nicht richtig korrigiert.

 Wählen Sie also den Teil des Hintergrunds aus, in dem sich das Bild, das an das 1. und 2. Argument von "findTransformECC" übergeben werden soll, nicht bewegt, und schneiden Sie es wie "base [: 300,:]", "tmp [: 300,:]" zu. ?) Dann hat es sich dramatisch verbessert, wenn ich das Originalbild nur beim Konvertieren mit `warpAffine`,` warpPerspective` verwendet habe.

 Wenn Sie ein zugeschnittenes Ausgabevideo verwenden, können Sie die fehlenden Teile außen nicht sehen, wodurch Sie sich gut fühlen.

 Wenn Sie es danach einen Tag lang in Ruhe lassen, ist es möglicherweise etwas widerstandsfähiger gegen Zeitänderungen, wenn Sie es auf einer konvertierten Version des vorherigen Frames anstelle des ersten Frames basieren.


Recommended Posts

Mit Python und OpenCV lassen Sie Unschärfevideos wie Festkommakameras aussehen
Leuchtendes Leben mit Python und OpenCV
Neuronales Netzwerk mit OpenCV 3 und Python 3
So erstellen Sie eine Überwachungskamera (Überwachungskamera) mit Opencv und Python
Erstellen Sie mit Python und OpenCV ein einfaches OMR (Mark Sheet Reader)
Bilder mit Pupil, Python und OpenCV aufnehmen
Fraktal zum Erstellen und Spielen mit Python
Erstellen verschiedener Photoshop-Videos mit Python + OpenCV ③ Erstellen Sie verschiedene Photoshop-Videos
Hallo Welt- und Gesichtserkennung mit OpenCV 4.3 + Python
Suchen und laden Sie YouTube-Videos automatisch mit Python herunter
Stellen Sie OpenCV3 in Python3 zur Verfügung, das mit pyenv installiert wurde
Feature Matching mit OpenCV 3 und Python 3 (A-KAZE, KNN)
[# 1] Mach Minecraft mit Python. ~ Vorforschung und Design ~
Binarisierung mit OpenCV / Python
[# 2] Mach Minecraft mit Python. ~ Modellzeichnung und Player-Implementierung ~
Versuchen Sie, ein einfaches Spiel mit Python 3 und iPhone zu erstellen
Erstellen Sie verschiedene Photoshop-Videos mit Python + OpenCV. ④ Beheben Sie Probleme
Ubuntu 20.04 auf Himbeer-Pi 4 mit OpenCV und mit Python verwenden
Erstellen verschiedener Photoshop-Videos mit Python + OpenCV ② Erstellen Sie Photoshop-Standbilder
[Python] Webkamera-Rahmengröße und FPS-Einstellungen mit OpenCV
Machen Sie mit AWS Lambda und Python gewöhnliche Tweets flottenartig
Laden / Anzeigen und Beschleunigen von GIF mit Python [OpenCV]
Verknüpfen Sie Python Enum mit einer Funktion, um es aufrufbar zu machen
Analysieren Sie Aktien mit Python und suchen Sie nach günstigen Handelsphasen
Konvertieren Sie Videos mit ffmpeg + python + opencv in Schwarzweiß
Ich habe versucht, die Benutzeroberfläche neben Python und Tkinter dreiäugig zu gestalten
Programmieren mit Python und Tkinter
Ver- und Entschlüsselung mit Python
"Apple-Verarbeitung" mit OpenCV3 + Python3
Python und Hardware-Verwenden von RS232C mit Python-
Bildbearbeitung mit Python OpenCV
Kameraerfassung mit Python + OpenCV
[Python] Verwenden von OpenCV mit Python (Basic)
Machen Sie eine Lotterie mit Python
Stellen Sie Opencv in Python zur Verfügung
Gesichtserkennung mit Python + OpenCV
Verwenden von OpenCV mit Python @Mac
Funktioniert mit Python und R.
Automatische Bildinterpolation mit OpenCV und Python (Fast Marching Method, Navier-Stokes)
Erstellen Sie eine gestreifte Illusion mit Gammakorrektur für Python3 und openCV3
Zeichnen Sie eine Aquarellillusion mit Kantenerkennung in Python3 und openCV3
Ich habe versucht, mit Selenium und Python einen regelmäßigen Ausführungsprozess durchzuführen
Erstellen Sie mit Python + Django + AWS eine Scraping-App und wechseln Sie Jobs
Wirf etwas mit Python in Kinesis und stelle sicher, dass es drin ist
[Python] Versuchen Sie, Zeichen aus Bildern mit OpenCV und pyocr zu erkennen
Ich habe versucht, mit Python + OpenCV eine Bildähnlichkeitsfunktion zu erstellen
Kommunizieren Sie mit FX-5204PS mit Python und PyUSB
Erstelle einen LINE-Bot mit Python + Heroku
Installieren Sie Python 2.7.9 und Python 3.4.x mit pip.
[Python] Verwenden von OpenCV mit Python (Bildfilterung)
AM-Modulation und Demodulation mit Python
Machen Sie Apache Log CSV mit Python
Scraping mit Node, Ruby und Python
[Python] Verwenden von OpenCV mit Python (Bildtransformation)
Lassen Sie uns eine GUI mit Python erstellen.
[Python] Verwenden von OpenCV mit Python (Kantenerkennung)
Kratzen mit Python und schöner Suppe
JSON-Codierung und -Decodierung mit Python
Hadoop-Einführung und MapReduce mit Python