[PYTHON] Berücksichtigen Sie die Verarbeitungsgeschwindigkeit, um den Bildpuffer mit numpy.ndarray zu verschieben

Hintergrund

Wenn Sie ein Video verarbeiten, möchten Sie möglicherweise n aufeinanderfolgende Frames puffern. Wenn Sie also den Puffer rollen und verwenden möchten, müssen Sie den Index des Puffers verschieben.

Bei der Verarbeitung mit Numpy gibt es meiner Meinung nach die folgenden zwei Verarbeitungsmethoden.

  1. Verwenden Sie die Methode numpy.roll
  2. Verschieben Sie den Index des Arrays und weisen Sie ihn zu

Ich möchte die schnellstmögliche Verarbeitungsmethode verwenden, daher werde ich überlegen, welcher dieser beiden Prozesse schneller ist.

Umgebung

Prüfergebnis

Ich habe den folgenden Vorgang auf einem Jupyter-Notebook versucht.

Setzen Sie den ersten Index des Arrays auf den Index, der die Anzahl der Bilder angibt

arr1 = np.zeros((30, 720, 1280))
# numpy.Verwenden Sie die Rollmethode
%timeit np.roll(arr1, 1, axis = 0)
# 147 ms ± 1.73 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

#Ersetzen Sie durch Verschiebung nach Index
%timeit arr1[1:,:,:] = arr1[0:-1,:,:]
# 189 ms ± 7.14 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

Setzen Sie den letzten Index des Arrays auf den Index, der die Anzahl der Bilder angibt

arr2 = np.zeros((720, 1280, 30))
# numpy.Verwenden Sie die Rollmethode
%timeit np.roll(arr2, 1, axis = 2)
# 186 ms ± 2.71 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

#Ersetzen Sie durch Verschiebung nach Index
%timeit arr2[:,:, 1:] = arr2[:,:,0:-1]
# 203 ms ± 1.06 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

Es scheint, dass die Verwendung von numpy.roll unter der Bedingung, dass die Bildgröße groß ist, schneller ist. Außerdem scheint es schneller zu sein, Bilder beim ersten Index zu wechseln.

Wenn das Bild klein ist

Wenn das Bild sehr klein ist (20 x 20 Pixel), ist die Indexverschiebung schneller, wie unten gezeigt.

arr3 = np.zeros((30, 20, 20))
# numpy.Verwenden Sie die Rollmethode
%timeit np.roll(arr3, 1, axis = 0)
# 17.1 µs ± 551 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

#Ersetzen Sie durch Verschiebung nach Index
%timeit arr3[1:,:,:] = arr3[0:-1,:,:]
# 7.36 µs ± 90.1 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

Punkte, nach denen ich in Bezug auf die Verarbeitung der Implementierung süchtig war

#Fehler
arr[0:-2,:,:] = arr[1:-1,:,:]
arr[-1,:,:] = new_image

#Richtige Antwort
arr[0:-1,:,:] = arr[1:,:,:]
arr[-1,:,:] = new_image

Wenn Sie den ersten Index auf -1 setzen, wird der letzte Index angegeben.

arr[1:-1,:,:]Dann


 Auf den ersten Blick scheint es, dass Sie vom zweiten bis zum ersten (bis zum letzten Index) angeben können.
 Da das vorletzte angegeben ist, besteht die Bewegung darin, dass sich das letzte Bild nicht nach vorne verschiebt.



Recommended Posts

Berücksichtigen Sie die Verarbeitungsgeschwindigkeit, um den Bildpuffer mit numpy.ndarray zu verschieben
Ich habe versucht, die Verarbeitungsgeschwindigkeit mit dplyr von R und pandas von Python zu vergleichen
So erhöhen Sie die Verarbeitungsgeschwindigkeit der Erfassung der Scheitelpunktposition
Zeichnen mit Matrix-Reinventor von Python Image Processing-
Ich habe versucht, die Trefferergebnisse von Hachinai mithilfe der Bildverarbeitung zu erhalten
So schneiden Sie den unteren rechten Teil des Bildes mit Python OpenCV
Versuchen Sie, die Höhendaten des National Land Research Institute mit Python abzubilden
[Bilderkennung] Lesen des Ergebnisses der automatischen Annotation mit VoTT
Schneiden Sie das Bild mit Pythonista auf abgerundete Ecken
Über die Verarbeitungsgeschwindigkeit von SVM (SVC) von Scikit-Learn
Ich habe versucht, die Trapezform des Bildes zu korrigieren
Bildverarbeitung? Die Geschichte, Python für zu starten
Ich habe die Verarbeitungsgeschwindigkeit der numpy eindimensionalisierung überprüft
Bildverarbeitung mit MyHDL
Extrahieren Sie die Tabelle der Bilddateien mit OneDrive & Python
Fügen Sie mit Matplotlib Informationen am unteren Rand der Abbildung hinzu
[Kapitel 5] Einführung in Python mit 100 Klopfen Sprachverarbeitung
[Kapitel 6] Einführung in Scicit-Learn mit 100 Klopfen Sprachverarbeitung
Konvertieren Sie das Bild in .zip mit Python in PDF
Versuchen Sie, den Inhalt von Word mit Golang zu erhalten
[Kapitel 3] Einführung in Python mit 100 Klopfen Sprachverarbeitung
Bildverarbeitung mit Python
[Kapitel 2] Einführung in Python mit 100 Klopfen Sprachverarbeitung
[Kapitel 4] Einführung in Python mit 100 Klopfen Sprachverarbeitung
Bildverarbeitung mit PIL
Geben Sie die Bilddaten mit Flask of Python zurück und zeichnen Sie sie in das Canvas-Element von HTML
Ich habe versucht, das Bild mit Python + OpenCV "gammakorrektur" zu machen
Ich habe versucht, mit TensorFlow den Durchschnitt mehrerer Spalten zu ermitteln
Datenbanksuche (Überprüfung der Verarbeitungsgeschwindigkeit mit oder ohne Index)
Zusammenfassung des mit einer Geschwindigkeit von einer Sekunde durchgeführten Bildcrawls
Einstellungen zum Eingeben und Debuggen des Inhalts der Bibliothek mit VS-Code
Sprachverarbeitung 100 Knocks-29: Holen Sie sich die URL des Flaggenbildes
Versuchen Sie, den Betrieb von Netzwerkgeräten mit Python zu automatisieren
Versuchen Sie, die Geschwindigkeit von Zeitraffervideos automatisch anzupassen (Teil 2).
[Lass uns mit Python spielen] Bildverarbeitung zu Monochrom und Punkten
Die Bildanzeigefunktion von iTerm ist praktisch bei der Verarbeitung von Bildern.
Holen Sie sich die Quelle der Seite unbegrenzt mit Python zu laden.
Versuchen Sie, Merkmale von Sensordaten mit CNN zu extrahieren
Bildverarbeitung mit Python (Teil 2)
opencv-python Einführung in die Bildverarbeitung
python3 Messen Sie die Verarbeitungsgeschwindigkeit.
Bildverarbeitung mit PIL (Pillow)
Punkt entsprechend dem Bild
Parallele Verarbeitung mit Parallel von Scikit-Learn
Bildverarbeitung mit Python (Teil 1)
Bildverarbeitung mit Python (3)
[Python] Bildverarbeitung mit Scicit-Image
Was tun, wenn ein Teil des Hintergrundbilds transparent wird, wenn Sie transparente Bilder mit Pillow kombinieren?
Ich habe die Geschwindigkeit von Hash mit Topaz, Ruby und Python verglichen
Verstehen Sie die Funktion der Faltung am Beispiel der Bildverarbeitung
Die Geschichte, dass man mit Pycharm kein Pygame spielen kann
Speichern Sie das Ergebnis des Crawls mit Scrapy im Google Data Store
Geschwindigkeitsvergleich der Volltextverarbeitung von Wiktionary mit F # und Python
Machen Sie sich mit der Pipeline von spaCy vertraut (wollen Sie es sein)
Ich habe versucht, die Bewässerung des Pflanzgefäßes mit Raspberry Pi zu automatisieren
[Statistik] Erfassen Sie das Bild der zentralen Polbegrenzungstheorie mit einem Diagramm
So erhalten Sie die ID von Type2Tag NXP NTAG213 mit nfcpy
Zeigen Sie das Bild der an den PC angeschlossenen Kamera auf der GUI an.
Ich habe versucht, das SD-Boot-Image von LicheePi Nano zu erstellen