cv2 VideoWriter returns 损坏的视频

cv2 VideoWriter returns corrupted video

有许多相关问题,但是 none 的解决方案似乎有效。我可以在 SO 上找到的主要解决方案与输入大小有关,我相信我已经纠正了这一点。然而,我有以下问题:

我有许多图像要用作框架:

frame_0001.png
frame_0002.png
frame_.....etc

我将它们全部加载到:

frames_location = glob.glob(r'stimuli\ambush_1\frame_*.png')
frames = []
for frame in frames_location:
    frames.append(cv2.imread(frame))

接下来,我使用以下函数将此帧列表转换为视频:

def frames_to_video(frames, name='test.mp4'):
    
    w,h,_ = frames[0].shape # extract size information

    fourcc = cv2.VideoWriter_fourcc('m', 'p', '4', 'v') 
    writer = cv2.VideoWriter(name, fourcc, 20,  (w,h) )

    for frame in frames:
        writer.write(frame)
    writer.release()

video = frames_to_video(frames)

运行 此代码按预期创建了一个 test.mp4 视频,大小为 1kb。我加载的图像每张大约 300kb,所以这已经是出现问题的第一个信号。尝试播放视频 returns 出现 0xc10100be 错误。

我哪里错了?我的代码有什么问题?

我是 运行 Python 3.9.6,安装了 OpenCv 4.5.3。

原来我少了一个dll文件。

更具体地说,我使用 pip 安装了 opencv。但是,我没有选择contrib版本。

因此,修复它很简单

py -m pip uninstall opencv-python
py -m pip install opencv-contrib-python