【问题标题】:Saved video using openCV shows nothing使用 openCV 保存的视频不显示任何内容
【发布时间】:2021-07-13 18:44:44
【问题描述】:

我有一组二进制图像,1 或 0。为了提供更多上下文,这些图像是蒙版,因此图像大部分是黑色的,并且显示一些白点。每个图像都是序列的一部分,我想将序列保存为视频,以查看斑点的演变过程。现在我只有很少的图片,在 7 到 20 之间,我有以下代码:

# predictedMasks is a list containing each mask that I want to see in the video
videoName = sequenceName + '.avi'
fourcc = cv2.VideoWriter_fourcc('X', 'V', 'I', 'D')
fps = 1
frame_width = np.size(predictedMasks[0], 1)
frame_height = np.size(predictedMasks[0], 0)
incolor = False
out = cv2.VideoWriter(videoName, fourcc, fps, (frame_width, frame_height), incolor)
for mask in predictedMasks:
    out.write(mask)
out.release()

现在,当我尝试从我的文件夹中打开视频时,它什么也没有显示,只有黑屏,尽管据我所知它应该显示白点。我正在使用 Windows 10,我还尝试使用以下方法更改编解码器:

videoName = sequenceName + '.mp4'
fourcc = cv2.VideoWriter_fourcc(*'mp4v')

这会导致同样的问题。是不是我做错了什么?

编辑:

感谢下面的答案,我发现问题是我必须将布尔值更改为“uint8”,然后将图像中的所有 1 更改为 255!编辑后的代码如下:

   out = cv2.VideoWriter(videoName, fourcc, fps, (frame_width, frame_height), incolor)
    for mask in predictedMasks:
        mask = mask.astype('uint8')
        mask = np.where(mask == 1, 255, mask)
        out.write(mask)
    out.release()

【问题讨论】:

    标签: python numpy opencv video


    【解决方案1】:

    我用一些示例数据值(帧)尝试了您的代码,并且效果很好。它在视频中相应地显示帧:

    # sample values
    data = np.array([[255,0,255,0],[255,0,255,0],[255,0,255,0]])
    sequenceName = "test"
    
    videoName = sequenceName + '.avi'
    fourcc = cv2.VideoWriter_fourcc('X', 'V', 'I', 'D')
    fps = 1
    frame_width = np.size(data, 1)
    frame_height = np.size(data, 0)
    incolor = False
    out = cv2.VideoWriter(videoName, fourcc, fps, (frame_width, frame_height), incolor)
    for i in range(100): # for 100 frames
        out.write(np.uint8(data))
    out.release()
    

    如果您也分享您预测的掩码,我们或许能够清楚地检测到问题。

    【讨论】:

    • 非常感谢您的回答!第一行很有启发性。
    • 太棒了!谢谢@BizarroJr
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-27
    相关资源
    最近更新 更多