使用将视频转换为图像的 cv2 与脚本进行循环
Making a loop with script using cv2 that converts video to images
我是使用 python 的初学者,所以这可能相对简单,但我想使用 Open CV 将我在网上找到的脚本制作成一个循环,以便它可以将整个文件夹的视频转换为图片。
当我将视频文件名输入 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)
理想情况下,您希望将 vidcap 移动到 getFrame 函数中以将视频源作为参数获取,这样每个视频的 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])
我是使用 python 的初学者,所以这可能相对简单,但我想使用 Open CV 将我在网上找到的脚本制作成一个循环,以便它可以将整个文件夹的视频转换为图片。
当我将视频文件名输入 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)
理想情况下,您希望将 vidcap 移动到 getFrame 函数中以将视频源作为参数获取,这样每个视频的 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])