python - 使用 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, 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()
解决方案
我用一些示例数据值(帧)尝试了您的代码,并且效果很好。它在视频中相应地显示帧:
# 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()
如果您也分享您预测的掩码,我们也许能够清楚地检测到问题。
推荐阅读
- r - 如何在不使用 confint 的情况下计算 R 中平均值的置信区间
- regex - 在 Google Data Studio 中创建新指标以仅计算品牌 KW 展示次数
- int - 错误 C4430 缺少类型说明符 - 假定为 int。注意:C++ 不支持默认整数
- sql - 从付款表 postgresql 中检索最后日期
- c - 孙子进程在 C 中具有 PID 1
- java - 如何仅使用堆栈实现递归函数?
- angular - 运行 ng new myapp 后将路由选项 No 更改为 Yes 的正确方法
- python - 在特定列(熊猫)中将值从底部行覆盖/移动到上部行
- python-3.x - apache2错误上的Python3.8 Flask wsgi:“致命的Python错误:...没有名为'encodings'的模块”
- javascript - Javascript:将天数转换为年、月和日