如何将视频转换为 numpy 数组?

How to convert a video to a numpy array?

如何将视频转换为多个 numpy 数组或单个数组以用于机器学习。我只找到在图像上执行此操作的方法。

常规图像表示为具有以下形状的 3D 张量:(height, width, channels)。如果图像是 RGB,通道值为 3,如果是灰度,通道值为 1。

一段视频是N帧的集合,每一帧都是一张图片。您希望将此数据表示为 4D 张量:(frames, height, width, channels).

因此,例如,如果您有 1 分钟的 30 fps 视频,其中每帧都是 RGB 且分辨率为 256x256,那么您的张量将如下所示:(1800, 256, 256, 3),其中 1800 是数字视频中的帧数:30 (fps) * 60(秒)。

要实现这一点,您基本上可以打开视频的每个单独帧,将它们全部存储在一个列表中,然后沿着一个新轴(即“帧”维度)将它们连接在一起。


您可以通过 OpenCV 执行此操作:

# Import the video and cut it into frames.
vid = cv2.VideoCapture('path/to/video/file')

frames = []
check = True
i = 0

while check:
    check, arr = vid.read()
    if not i % 20:  # This line is if you want to subsample your video
                    # (i.e. keep one frame every 20)
        frames.append(arr)
    i += 1

frames = np.array(frames)  # convert list of frames to numpy array