我正在尝试写出3D灰度f32 numpy数组(outputStack)作为python中的视频(例如.avi,.mp4)。但是,当我在默认的Windows 10应用程序(“电影和电视”)中播放视频时,视频会以高条纹,丑陋且无法识别的方式播放。
重要的是,我的输出.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编解码器吗?