Как использовать OpenCV VideoCapture внутри для цикла? - PullRequest
0 голосов
/ 28 февраля 2019

Я пытаюсь конвертировать видео в кадры с помощью VideoCapture.Внутри моего каталога 'startpath' у меня есть несколько файлов .mp4.Я хочу запустить цикл for, используя который все эти файлы преобразуются в .png кадры и будут храниться в отдельной папке для каждого видео.

Но я не уверен, как заставить это работать для нескольких файлов, использующих цикл for.

Я могу заставить работать код, если есть только 1 файл.Ниже приведен код -:

import cv2
import os, fnmatch

startpath='C:/Users/work/Documents/data'
listOfFiles = os.listdir(startpath)

print(listOfFiles)
pattern = "*.mp4"
names = []
for entry in listOfFiles:  
    if fnmatch.fnmatch(entry, pattern):
        names.append(entry)
print (names) #this list has all the .mp4 files
vidcap=cv2.VideoCapture(C:/Users/work/Downloads/SampleVideo_1280x720_30mb.mp4)
success,image = vidcap.read()
count = 0
hello = os.path.join(startpath, 'output')
output = os.mkdir(hello)
os.chdir(hello)
while success:
   cv2.imwrite("frame%d.jpg" % count, image) 
   # save frame as JPEG file
   success,image = vidcap.read()
   print('Read a new frame: ', success)
   count += 1

Любая помощь в этом будет принята с благодарностью.

Спасибо

1 Ответ

0 голосов
/ 28 февраля 2019

попробуйте этот код. Я еще не запустил его.Но это должно дать представление о том, как решить вашу проблему.

import cv2
import os, fnmatch

startpath='C:/Users/work/Documents/data'
listOfFiles = os.listdir(startpath)

print(listOfFiles)
pattern = "*.mp4"
names = []
for entry in listOfFiles:  
    if fnmatch.fnmatch(entry, pattern):
        names.append(entry)
print (names) #this list has all the .mp4 files
for eachnames in names:
  vidcap=cv2.VideoCapture('C:/Users/work/Documents/data'+ eachnames)
  success,image = vidcap.read()
  count = 0
  hello = os.path.join(startpath, eachnames.split('.')[0])
  output = os.mkdir(hello)
 # os.chdir(hello)
  count=0
  while success:
    cv2.imwrite("frame%d.jpg" % count, hello+'/'+image) 
    # save frame as JPEG file
    success,image = vidcap.read()
    print('Read a new frame: ', success)
    count += 1

Я просто добавил цикл, чтобы просмотреть все имена файлов и использовать это имя для создания папки.Это имя также используется в imwrite для сохранения.

...