如何遍历多维数组,从(3,5,96,96)数组中提取(3,96,96)单帧图像?
数组抽帧问题解决方案
首先确认你的数组维度顺序是否确实为[通道数, 帧数, 高度, 宽度](即(C, T, H, W))。如果维度和你描述的一致,你写的切片逻辑本身是可以取出shape为(3,96,96)的单帧数组的,你可以先加一行打印验证:
print(frame[:, 0, :, :].shape)
如果输出不是你预期的格式,根据常见场景对应修改即可:
- 如果你需要适配OpenCV、PIL等常用图像处理库的
(高度, 宽度, 通道数)格式要求,调整通道顺序即可:
import numpy as np frame_count = frame.shape[1] for i in range(frame_count): # 先取出C,H,W格式的单帧 fr = frame[:, i, :, :] # 转置为H,W,C格式 fr = np.transpose(fr, (1, 2, 0)) # 此处添加你的后续处理逻辑
- 如果你使用的是PyTorch张量,需要保留维度做批量操作,或者避免自动降维带来的报错,可以用以下写法:
import torch frame_count = frame.shape[1] for i in range(frame_count): # 如需保留帧数维度得到(3,1,96,96),用区间索引 fr = frame[:, i:i+1, :, :] # 如需得到(3,96,96)格式,直接squeeze掉多余维度即可 fr = fr.squeeze(1)
如果运行以上代码仍有问题,先打印原始数组的shape确认是否和你描述的(3,5,96,96)一致,排查是否有变量命名冲突或者数组维度顺序搞反的问题。
内容的提问来源于stack exchange,提问作者shailza
相关产品推荐
相关产品推荐

