簡體   English   中英

如何在文件夾中的所有視頻文件上運行我的 Python OpenCV 代碼?

[英]How do I run my Python OpenCV code on all video files in a folder?

我編寫了一些 python 代碼,用於使用 OpenCV 從視頻文件中提取兩幀。 我已經測試了我的代碼,它適用於一個視頻文件。

但是,我有一個包含數百個視頻文件的文件夾,我想從該文件夾中的所有視頻中提取兩幀。 有沒有一種方法可以對文件夾中的所有文件執行此操作? 也許使用 os 模塊或類似的東西?

我的代碼如下供參考:

    import cv2
    import numpy as np
    import os

    # Playing video from file:
    cap = cv2.VideoCapture('/Users/batuhanyildirim/Desktop/UCF-
    101/BenchPress/v_benchPress_g25_c07_mp4.m4v')

    try:
        if not os.path.exists('data'):
            os.makedirs('data')
    except OSError:
        print('Error: Creating directory of data')

    currentFrame = 0

    while(True):
        # Capture frame by frame
        ret, frame = cap.read()

        # Only take the first frame and tenth frame
        if currentFrame == 0:
            # Saves image of the current frame in jpg file
            name = './data/frame' + str(currentFrame) + '.jpg'
            print ('Creating...' + name)
            cv2.imwrite(name, frame)

        if currentFrame == 5:
            name = './data/frame' + str(currentFrame) + '.jpg'
            print ('Creating...' + name)
            cv2.imwrite(name, frame)

        # To stop duplicate images
        currentFrame += 1

    cap.release()
    cv2.destroyAllWindows()

只需使其 function 廣告在每個視頻的 for 循環中調用它

import cv2
import numpy as np
import os

def frame_capture(file):
  # Playing video from file:
  cap = cv2.VideoCapture(file)

  try:
      if not os.path.exists('data'):
          os.makedirs('data')
  except OSError:
      print('Error: Creating directory of data')

  currentFrame = 0

  while(True):
      # Capture frame by frame
      ret, frame = cap.read()

      # Only take the first frame and tenth frame
      if currentFrame == 0:
          # Saves image of the current frame in jpg file
          name = './data/frame' + str(currentFrame) + '.jpg'
          print ('Creating...' + name)
          cv2.imwrite(name, frame)

      if currentFrame == 5:
          name = './data/frame' + str(currentFrame) + '.jpg'
          print ('Creating...' + name)
          cv2.imwrite(name, frame)

      # To stop duplicate images
      currentFrame += 1

  cap.release()
  cv2.destroyAllWindows()

對於循環:

import os
for file in os.listdir("/mydir"):
    if file.endswith(".m4v"):
        path=os.path.join("/mydir", file))
        frame_capture(path)

選擇的答案很棒,但對我來說運行了一個多小時,所以我創建了目錄並將其設置為我在此代碼之前的一個步驟中的工作目錄,然后在上面代碼中的最后一個 if 語句之后添加了一個“中斷” . 那成功了!

    import cv2
    import numpy as np
    import os

    def frame_capture(file):
        # Playing video from file:
       cap = cv2.VideoCapture(file)

      currentFrame = 0

      while(True):
          # Capture frame by frame
          ret, frame = cap.read()

            # Only take the tenth frame

          if currentFrame == 5:
              name = './data/frame' + str(currentFrame) + '.jpg'
              print ('Creating...' + name)
              cv2.imwrite(name, frame)
              break

              # To stop duplicate images
          currentFrame += 1

      cap.release()
      cv2.destroyAllWindows()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM