Hintergrund
Ich musste Anmerkungen machen, um Lehrerdaten für maschinelles Lernen zu erstellen.
Aus diesem Grund wurde eine große Anzahl von Standbildern benötigt, daher habe ich beschlossen, Standbilder aus dem Video auszuschneiden.
Zuerst habe ich es manuell mit einem Tool gemacht, das Standbilder aus Videos extrahiert. Die Aufgabe war mühsam, deshalb habe ich beschlossen, sie zu automatisieren.
Vorgehensweise
installiere openCV
Video wird geladen
Schneiden Sie für jeden Einzelbildbild ein Standbild aus
Passen Sie die Standbildgröße neu an
installiere openCV Diesmal habe ich es mit Windows + Anaconda gemacht, also an der Anaconda-Eingabeaufforderung
Users\user\conda install -c conda-forge opencv
Ich konnte es mit einem Befehl installieren.
Grundsätzlich kann dies vollautomatisch erfolgen, es dauerte jedoch ca. 2 Stunden.
Ein wenig Schreiben in Python ist erforderlich, um tatsächlich zu funktionieren.
<br> Code <br>
Ein Laplace-Filter ist ein räumlicher Filter, der Bildkonturen durch quadratische Differenzierung extrahiert.
laplacian.var untersucht die Variabilität der Laplace-Verteilung.
if ret and laplacian.var() >= laplacian_thr:
laplacian_thr ist ein Schwellenwert für die Beurteilung als unscharfes Bild
Ich entschied mich, diesen Wert zu verwenden, indem ich die Parameter des Bildes erfasste, die ich als unscharf erkannte.
Dieses Mal habe ich beschlossen, die mit dem Wert von laplasiaan.var () von 800 oder weniger als unscharfes Bild zu beurteilen.
```python
"""
@author: S.Nakamura 2020/10/18
Ein Programm, das ein Video liest und in Bilder unterteilt (jpg)
input_Film: Name der zu lesenden Videodatei
cpf: Wie viele Frames sollen gespeichert werden?
image_dir: Zielverzeichnis für die Bildausgabe (erstellen, falls nicht verfügbar)
・ Video laden
・ Wie viele Frames sollen gelesen werden?
- Geben Sie das Ausgabezielverzeichnis des Bildes an
・ Entfernen Sie das unscharfe Bild
・ Größe ändern
・ Bestimmen Sie einen Namen und eine Ausgabe
"""
import cv2
import numpy as np
import os
i=0
count = 0
cpf = 10 #Wie viele Frames müssen ausgeschnitten werden?
#Bildgröße
image_width =Bildbreite zum Ändern der Größe
image_heigh =Bildgröße zum Ändern der Größe
#Laplace für die Beurteilung von Unschärfebildern.var
laplacian_thr = 800 #Schwellenwert bei der Beurteilung eines unscharfen Bildes
#Video wird geladen
cap = cv2.VideoCapture('Geben Sie die zu lesende Videodatei an')
while(cap.isOpened()):
ret, frame = cap.read() #Video laden
#assert frame, "Gescheitert zu öffnen" #Zum Debuggen
if ret == False:
print('Finished') #Wenn der Videoausschnitt fertig ist
break
if count%cpf == 0: #Wie viele Frames müssen einmal ausgeschnitten werden?
#Reduzieren Sie die Größe
resize_frame = cv2.resize(frame,(image_width,image_heigh))
#Überprüfen Sie, ob das Bild unscharf ist
laplacian = cv2.Laplacian(resize_frame, cv2.CV_64F)
if ret and laplacian.var() >= laplacian_thr: #Geben Sie nur diejenigen aus, deren Defokusbeurteilung über dem Schwellenwert liegt
#Dateiname des ersten Arguments Bild, zweites Argument Das Bild, das Sie speichern möchten
write = cv2.imwrite('Name und Erweiterung des zu speichernden Bildes') #Zeigen Sie das abgeschnittene Bild an
assert write, "Fehler beim Speichern"
print('Save',Name und Erweiterung des zu speichernden Bildes) #Bestätigungsanzeige
i += 1
count = count + 1
cap.release()
Ich habe es nicht im Detail überprüft, aber ich konnte den Zweck erreichen, das Bild auszuschneiden und seine Größe zu ändern. Ich bin beeindruckt, ein Standbild aus einem Video mit einer so einfachen Beschreibung ausschneiden zu können.
Referenzinformationen
Blur detection with OpenCV https://www.pyimagesearch.com/2015/09/07/blur-detection-with-opencv/
note.nkmk.me https://note.nkmk.me/python-opencv-video-to-still-image/
Programm zum Ausschneiden von Bildern (jpg) aus Videos (mp4) https://www.souichi.club/deep-learning/spliter/