【问题标题】:cv2.VideoWriter() returns strange videocv2.VideoWriter() 返回奇怪的视频
【发布时间】:2022-01-01 00:17:55
【问题描述】:

我正在使用这个函数(在一个类中)将一组图像保存到一个视频中。尽管程序运行没有错误,但我得到的视频最终不是预期的。即使我单独打印图像时,它也有条纹效果。

def saveVideo(self):
        import cv2
        out = cv2.VideoWriter("output.mp4", cv2.VideoWriter_fourcc(*'mp4v'), self.fps, (160, 122), 0)
        for i in range(0, len(self.images)):
            out.write(self.images[i])
        out.release()

更新:视频中的图像看起来像原始图像被拉伸、翻转并且中间有黑条。视频形状一定有问题,但我无法解决。

【问题讨论】:

  • 你能打印 self.images[i].shape 吗?
  • @Micka 它是 (122, 160)
  • 如果我在 VideoWriter 中将 160 与 122 切换,则视频文件已损坏,我无法打开它。
  • 没有足够的代码来重现。请查看minimal reproducible example
  • 你的图片有多少个频道?

标签: python opencv video


【解决方案1】:

您是否尝试过将图像转换为 uint8?试试:

np.uint8(self.images[i])

【讨论】:

  • 成功了!!!!谢谢!
【解决方案2】:

我会说尝试

fourcc = cv2.VideoWriter_fourcc(*'XVID')

而不是

cv2.VideoWriter_fourcc(*'mp4v')

就是这样

fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter("output.mp4", fourcc, self.fps, (160, 122), 0)

【讨论】:

  • 没用:/
  • 该死的。你怎么称呼self.fps?功能上的 fps 对项目很重要吗?您可以尝试在 cv2.VideoWriter() 中使用整数调用它。比如:out = cv2.VideoWriter("output.mp4",fourcc, 60.0, (160, 122), 0)
  • 试过了,也没有用。我真的不明白为什么
  • 我没有比 :( 除非你评论整个代码哈哈
  • 我无法共享整个代码,但我意识到如果我使用随机数据也会遇到同样的问题: import cv2 data = np.random.randint(0, 255, size=[1000, 122 , 160]) out = cv2.VideoWriter("output.mp4", cv2.VideoWriter_fourcc(*'mp4v'), 8, (160, 122), 0) for i in range(0, len(data)): out .write(data[i]) out.release()
猜你喜欢
  • 1970-01-01
  • 2020-07-27
  • 2020-07-30
  • 1970-01-01
  • 1970-01-01
  • 2020-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多