首页 > 解决方案 > 使用脚本将视频转换为训练图像数据集

问题描述

我的视频文件夹中有一个视频,我想将其转换为我的 CV 模型的图像数据集。这是我正在使用的脚本:

import cv2
import os

cam = cv2.VideoCapture('../Videos/training-videos/0.mp4')

try:
    if not os.path.exists('../Videos/training-videos/data0'):
        os.makedirs('../Videos/training-videos/data0')
except OSError:
    print('Error: Creating directory of data0')

current_frame = 0

while (True):

    ret, frame = cam.read()

    if ret:
        name = './data/frame' + str(current_frame) + '.jpg'
        print('Creating...' + name)

        cv2.imwrite(name, frame)

        current_frame += 1
    else:
        break
cam.release()
cv2.destroyAllWindows()

我得到以下输出:

...
Creating..../data/frame19485.jpg
Creating..../data/frame19486.jpg
Creating..../data/frame19487.jpg
Creating..../data/frame19488.jpg
Creating..../data/frame19489.jpg
Creating..../data/frame19490.jpg
Creating..../data/frame19491.jpg
Creating..../data/frame19492.jpg
Creating..../data/frame19493.jpg
Creating..../data/frame19494.jpg
Creating..../data/frame19495.jpg
Creating..../data/frame19496.jpg
Creating..../data/frame19497.jpg
Creating..../data/frame19498.jpg
Creating..../data/frame19499.jpg
Creating..../data/frame19500.jpg
Creating..../data/frame19501.jpg
Creating..../data/frame19502.jpg
Creating..../data/frame19503.jpg
Creating..../data/frame19504.jpg
Creating..../data/frame19505.jpg
Creating..../data/frame19506.jpg
Creating..../data/frame19507.jpg

这一切都很好。它还会创建../Videos/training-videos/data0文件夹,但里面没有图像。我究竟做错了什么?

标签: pythonopencvcomputer-vision

解决方案


试试这个对我有用的代码。只需在路径变量中替换您的路径。如果要使用相对路径,则需要指定整个路径。除此之外,您正在创建一个目录data0并且您试图将图像放在data中。

import cv2
import os

path = 'C:/Users/hp/Pictures/Camera Roll'
cam = cv2.VideoCapture(os.path.join(path, 'video.mp4'))

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

current_frame = 0

while (True):

    ret, frame = cam.read()

    if ret:
        name = 'data0/frame' + str(current_frame) + '.jpg'
        name = os.path.join(path, name)
        print('Creating...' + name)

        cv2.imwrite(name, frame)

        current_frame += 1
    else:
        break
cam.release()
cv2.destroyAllWindows()

推荐阅读