咨询Python对10000张图像矩阵逐相邻两张平均降采样影片帧率的方法
图像矩阵连续帧平均降帧率实现方案
- 前提说明:假设你已将10000张图像整合为numpy数组
video_matrix,维度格式为(总帧数, 图像高度, 图像宽度, 通道数);灰度图像无最后一维通道数,逻辑通用。如果你的矩阵维度顺序不同,可先用np.transpose调整为帧数在前的格式。
实现方式1:新手友好的循环版
逻辑直观易理解,方便调试修改:
import numpy as np # 替换为你自己的图像矩阵即可 # 示例生成测试矩阵:video_matrix = np.random.randint(0, 256, size=(10000, 720, 1280, 3), dtype=np.uint8) frame_count, h, w, channel = video_matrix.shape # 总帧数为奇数时自动丢弃最后一帧,不需要可自行调整逻辑 output_frame_count = frame_count // 2 # 用float类型存储中间结果避免数值溢出 output_arr = np.zeros((output_frame_count, h, w, channel), dtype=np.float32) for i in range(output_frame_count): frame_a = video_matrix[2*i].astype(np.float32) frame_b = video_matrix[2*i + 1].astype(np.float32) output_arr[i] = (frame_a + frame_b) / 2 # 转换回和原始数据一致的整型,16位图像请替换为np.uint16 output_arr = np.round(output_arr).astype(np.uint8)
实现方式2:向量化高效版
无需循环,通过numpy维度变换批量计算,处理10000帧的速度比循环版快数十倍,推荐生产环境使用:
import numpy as np # 维度重排:将10000帧拆分为5000组,每组2帧 grouped_frames = video_matrix.reshape(-1, 2, video_matrix.shape[1], video_matrix.shape[2], video_matrix.shape[3]) # 对每组的两帧求平均后转整型,16位图像替换为np.uint16 output_arr = grouped_frames.mean(axis=1).round().astype(np.uint8)
补充说明:如果需要将处理后的帧导出为文件,直接遍历
output_arr调用Image.fromarray保存即可,逻辑和你提供的参考代码末尾导出部分一致。
内容的提问来源于stack exchange,提问作者Souchan
相关产品推荐
相关产品推荐

