如何将视频转换为 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
如何将视频转换为多个 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