使用将视频转换为图像的cv2脚本进行循环

2024-03-29 13:58:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我是一个初学者使用python,所以这可能是相对简单的,但我想把一个脚本,我发现网上使用opencv成一个循环,以便它可以转换成图像整个文件夹的视频。你知道吗

当我向cv2.VideoCapture()输入一个视频文件名时,这段代码工作得很好,但是当我试图将它定义为循环可以引用的变量名时遇到了问题。因此,任何有关如何正确构造循环和子例程的帮助都将非常有用!你知道吗

import cv2
import numpy as np
import os
vidcap = cv2.VideoCapture('FS_T8_2019-01-17_02.14.52_.MP4')

def getFrame(sec):
    vidcap.set(cv2.CAP_PROP_POS_MSEC,sec*1000)
    hasFrames,image = vidcap.read()
    if hasFrames:
        cv2.imwrite("image"+str(count)+".jpg", image)     # save frame as JPG file
    return hasFrames
sec = 0
frameRate = 1 #//it will capture image in each 1 second
count=1
success = getFrame(sec)
while success:
    count = count + 1
    sec = sec + frameRate
    sec = round(sec, 2)
    success = getFrame(sec)

Tags: imageimport脚本视频ascountseccv2
1条回答
网友
1楼 · 发布于 2024-03-29 13:58:16

理想情况下,您需要在getFrame函数中移动vidcap,以获取视频源作为参数,这样每个视频的vidcap都会不同。我在一个文件夹(视频)上循环,然后像这样将帧输出到另一个文件夹(输出)

import cv2
import numpy as np
import os
import sys
ROOT_DIRECTORY_PATH = sys.path[0]


def getFrame(sec, src, img_out):
    vidcap = cv2.VideoCapture(src)
    vidcap.set(cv2.CAP_PROP_POS_MSEC, sec * 1000)
    hasFrames, image = vidcap.read()
    if hasFrames:
        cv2.imwrite(img_out, image)     # save frame as JPG file
    return hasFrames

def create_frame(src, dst):
    sec = 0
    frameRate = 1  # //it will capture image in each 1 second
    count = 1
    img_out = dst + '_' + str(count) + '.jpg'
    success = getFrame(sec, src, img_out)
    while success:
        count = count + 1
        sec = sec + frameRate
        sec = round(sec, 2)
        img_out = dst + '_' + str(count) + '.jpg'
        success = getFrame(sec, src, img_out)

for mp4name in os.listdir('videos'):
    create_frame(ROOT_DIRECTORY_PATH + '/videos/' + mp4name,
                 ROOT_DIRECTORY_PATH + '/output/' + mp4name.split('.mp4')[0])

相关问题 更多 >