Contexte
J'avais besoin d'annoter pour créer des données d'enseignant pour l'apprentissage automatique.
Pour cette raison, une grande quantité d'images fixes était nécessaire, j'ai donc décidé de supprimer des images fixes de la vidéo.
Au début, je le faisais manuellement à l'aide d'un outil qui extrait des images fixes à partir de vidéos. La tâche était fastidieuse, j'ai donc décidé de l'automatiser.
Procédure
installer openCV
Chargement de la vidéo
Découpez une image fixe pour chaque image d'unité
Réajuster la taille de l'image fixe
installer openCV Cette fois, je l'ai fait avec windows + anaconda, donc à l'invite anaconda
Users\user\conda install -c conda-forge opencv
J'ai pu l'installer avec une commande.
Fondamentalement, cela peut être fait de manière entièrement automatique, mais cela a pris environ 2 heures.
Un peu d'écriture en Python est nécessaire pour fonctionner.
<br> Code <br>
Un filtre laplacien est un filtre spatial qui extrait les contours de l'image en utilisant la différenciation quadratique.
laplacian.var examine la variabilité de la distribution de Laplace.
if ret and laplacian.var() >= laplacian_thr:
laplacian_thr est un seuil pour juger comme une image floue
J'ai décidé d'utiliser cette valeur en acquérant les paramètres de l'image que je reconnaissais comme floue.
Cette fois, j'ai décidé de juger celui avec la valeur de laplasiaan.var () de 800 ou moins comme image floue.
```python
"""
@author: S.Nakamura 2020/10/18
Un programme qui lit une vidéo et la divise en images (jpg)
input_movie: nom du fichier vidéo à lire
cpf: combien d'images enregistrer
image_dir: répertoire de destination de sortie d'image (créer si non disponible)
・ Chargement de la vidéo
・ Combien d'images à lire
-Spécifier le répertoire de destination de sortie de l'image
・ Supprimer l'image floue
・ Redimensionner
・ Déterminez un nom et une sortie
"""
import cv2
import numpy as np
import os
i=0
count = 0
cpf = 10 #Combien de cadres découper
#Taille de l'image
image_width =Largeur de l'image à redimensionner
image_heigh =Hauteur de l'image à redimensionner
#Laplacien pour le jugement d'image floue.var
laplacian_thr = 800 #Seuil lors de l'évaluation d'une image floue
#Chargement de la vidéo
cap = cv2.VideoCapture('Spécifiez le fichier vidéo à lire')
while(cap.isOpened()):
ret, frame = cap.read() #Charger la vidéo
#assert frame, "Échec de l'ouverture" #Pour le débogage
if ret == False:
print('Finished') #Lorsque la découpe vidéo est terminée
break
if count%cpf == 0: #Combien d'images à découper une fois
#Réduisez la taille
resize_frame = cv2.resize(frame,(image_width,image_heigh))
#Vérifiez si l'image est floue
laplacian = cv2.Laplacian(resize_frame, cv2.CV_64F)
if ret and laplacian.var() >= laplacian_thr: #Sortie uniquement ceux dont le jugement de défocalisation est supérieur au seuil
#Nom de fichier de l'image du premier argument, deuxième argument L'image que vous souhaitez enregistrer
write = cv2.imwrite('Nom et extension de l'image à enregistrer') #Afficher l'image coupée
assert write, "Échec de l'enregistrement"
print('Save',Nom et extension de l'image à enregistrer) #Affichage de confirmation
i += 1
count = count + 1
cap.release()
Bien que nous ne l'ayons pas vérifié en détail, nous avons atteint l'objectif de découper l'image et de la redimensionner. Je suis impressionné de pouvoir découper une image fixe d'une vidéo avec une description aussi simple.
Informations de référence
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/
Programme pour découper des images (jpg) à partir de vidéos (mp4) https://www.souichi.club/deep-learning/spliter/
Recommended Posts