微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 openCV 保存的视频不显示任何内容

如何解决使用 openCV 保存的视频不显示任何内容

我有一个二进制图像数组,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,incolor)
    for mask in predictedMasks:
        mask = mask.astype('uint8')
        mask = np.where(mask == 1,255,mask)
        out.write(mask)
    out.release()

解决方法

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

# sample values
data = np.array([[255,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()

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。