Python cv2.VideoWriter()在从numpy数组写入.avi时会产生失真的视频

2024-10-03 04:25:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用python编写一个3D灰度f32 numpy数组(outputStack)作为视频(例如,.avi,.mp4)。但是,当我在默认的Windows 10应用程序(“电影和电视”)中播放视频时,视频会播放高度带状、难看且无法识别的视频See image here

重要的是,我的output.avi具有预期的维度、FPS和时间长度。文件大小为252584KB。这是我的密码:

(H,W) = np.shape(outputStack[0, :, :])
FPS = 10
seconds = int((np.shape(outputStack[:, 0, 0])[0]) / FPS)
fourcc = cv2.VideoWriter_fourcc('M', 'J', 'P', 'G')
titleTemp = './' + fileName.split('.')[0] + '.avi'
vid = cv2.VideoWriter(titleTemp, cv2.VideoWriter_fourcc('M', 'J', 'P', 'G'), FPS, (W, H), isColor = False)
 
for i in range(FPS * seconds):
    frameTemp = outputStack[i, :, :]
    vid.write(frameTemp)
 
vid.release()

我还尝试使用cv2.normalize()和cv2.merge()将阵列转换为3通道BGR;这里我用isColor=True调用cv2.VideoWriter(),这会产生类似的结果。在所有情况下,帧在matplotlib中显示良好

我根本不知道出了什么问题。是否cv2.VideoWriter不支持具有0到1值的f32数组?我的编解码器是否以某种方式错误地压缩了我的阵列?是Windows10电影公司吗;电视不支持MJPG编解码器


Tags: 视频电影np数组cv2电视secondsfps