如何将视频转换为多个numpy数组或单个数组以用于机器学习?我只找到了处理图像的方法。
回答:
普通图像被表示为具有以下形状的3D张量:(height, width, channels)
。如果图像是RGB的,通道值为3;如果是灰度的,则为1。
视频是一系列N帧的集合,每一帧都是一个图像。你希望将这些数据表示为一个4D张量:(frames, height, width, channels)
。
例如,如果你有一分钟的视频,帧率为30,每帧是RGB且分辨率为256×256,那么你的张量看起来会像这样:(1800, 256, 256, 3)
,其中1800是视频中的帧数:30(帧率)* 60(秒)。
要实现这一点,你基本上可以打开视频的每一帧,将它们全部存储在一个列表中,然后沿一个新轴(即“帧”维度)将它们连接起来。
你可以通过OpenCV来实现这一点:
# 导入视频并将其切割成帧。
vid = cv2.VideoCapture('path/to/video/file')
frames = []
check = True
i = 0
while check:
check, arr = vid.read()
if not i % 20: # 这一行是如果你想对视频进行抽样(即每20帧保留一帧)
frames.append(arr)
i += 1
frames = np.array(frames) # 将帧列表转换为numpy数组