【问题标题】:Getting frames from video with tuning frames?通过调整帧从视频中获取帧?
【发布时间】:2018-05-30 17:46:15
【问题描述】:

我有一个视频,我使用以下代码从视频中获取帧。视频为 24 秒,我得到了 742 张图像。我想在我的代码中调整这部分以从视频中获取更多图像。

我得到的框架也是逆时针倾斜 90*。请帮帮我。

import cv2
vidcap = cv2.VideoCapture('20180530_115209.mp4')
success,image = vidcap.read()
count = 0
success = True
while success:
    cv2.imwrite("sushant_2/image/frame%d.jpg" % count, image)     # save frame as JPEG file      
    success,image = vidcap.read()
    print('Read a new frame: ', count)
    count += 1

【问题讨论】:

  • 如果你想改变 fps,试试 cv2.VideoWriter()
  • 742 帧/24 秒 = 30 fps。你的视频有不同的帧率吗?预期的结果是什么?
  • 只能加快获取帧的过程(提高视频的fps)
  • 您的视频格式的编码是什么?另外,请确保您安装了最新版本的 FFmpeg,OpenCV 在内部使用它来编码/解码图像。

标签: python opencv computer-vision


【解决方案1】:

视频中的帧数有限,您已经在提取所有帧。

vidcap.read 抓取、解码并返回下一个视频帧,当没有更多帧时,它将返回 false,这就是您已经在处理的内容。


要旋转试试这个(将度数更改为您需要的度数):

import cv2
vidcap = cv2.VideoCapture('20180530_115209.mp4')
success,image = vidcap.read()
h, w = image.shape[:2]
M = cv2.getRotationMatrix2D((w / 2, h / 2), 90, 1.0)
count = 0
success = True
while success:
    rotated90 = cv2.warpAffine(image, M, (h, w))
    cv2.imwrite("sushant_2/image/frame%d.jpg" % count, rotated90)     # save frame as JPEG file      
    success,image = vidcap.read()
    print('Read a new frame: ', count)
    count += 1

【讨论】:

  • 是的,它对我有用,图像倾斜但图像的某些部分丢失(从底部和右侧边框被裁剪)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-20
  • 2018-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-23
相关资源
最近更新 更多