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

时间:2020-07-03 01:54:15

标签: python numpy opencv video-capture

我正在尝试写出3D灰度f32 numpy数组(outputStack)作为python中的视频(例如.avi,.mp4)。但是,当我在默认的Windows 10应用程序(“电影和电视”)中播放视频时,视频会以高条纹,丑陋且无法识别的方式播放。 See image here

重要的是,我的输出.avi具有预期的尺寸,FPS和时间长度。档案大小为252,584 KB。这是我的代码:

(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数组吗?我的编解码器是否以某种方式错误地压缩了数组? Windows 10电影电视不支持MJPG编解码器吗?

0 个答案:

没有答案