Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从文件夹中的所有视频抓取视频帧,使用openCV处理,保存到自己的文件夹?_Python_Opencv_Video Processing - Fatal编程技术网

Python 从文件夹中的所有视频抓取视频帧,使用openCV处理,保存到自己的文件夹?

Python 从文件夹中的所有视频抓取视频帧,使用openCV处理,保存到自己的文件夹?,python,opencv,video-processing,Python,Opencv,Video Processing,我有这样的代码。我知道这是不对的,但我对这方面还不太熟悉,不知道如何解决它。如何使cv2在文件夹中的每个视频上运行,每3秒拍摄一帧,并将帧图像保存在/data/--ex./data/rise_of_skywalker中的新文件夹中 谢谢 import cv2 import numpy as np import os def frame_capture(file): cap = cv2.VideoCapture(file) try: if not os.path.

我有这样的代码。我知道这是不对的,但我对这方面还不太熟悉,不知道如何解决它。如何使cv2在文件夹中的每个视频上运行,每3秒拍摄一帧,并将帧图像保存在
/data/--ex./data/rise_of_skywalker
中的新文件夹中

谢谢

import cv2
import numpy as np
import os

def frame_capture(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()
'''
(((how do I change this block here to get it for every 3 seconds?)))
'''
        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()
    print ("Done!")

for file in os.listdir("/users/x/Desktop/y/videos"):

    if file.endswith(".mp4"):
        path=os.path.join("/users/x/Desktop/y/videos", file))
        frame_capture(path)

如果我理解正确,您要做的是将行
如果currentFrame==5:
更改为
如果currentFrame%(3*fps)==0:

在这一行之前,在循环之外,添加
fps=cap.get(cv2.cap\u PROP\u fps)

使用
ffmpeg
会更简单,我认为如果你能将问题减少到最低程度,人们会更容易帮助你,而这并不像你期望的那样有效。这个过程实际上可能会帮助你自己找到答案,但肯定会让回答更容易。