![](/img/trans.png)
[英]How do I apply my python code to all of the files in a folder at once, and how do I create a new name for each subsequent output file?
[英]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.