【问题标题】:OpenCV don't get last frame of the videoOpenCV没有得到视频的最后一帧
【发布时间】:2020-06-26 19:06:46
【问题描述】:

我尝试从视频中获取第一帧、中间帧和最后一帧,但只能获取第一帧和中间帧。

这是我的代码:

import cv2
import math

vidcap = cv2.VideoCapture("/home/data/input/video.MOV")

# Get number of frame of the video
length = int(vidcap.get(cv2.CAP_PROP_FRAME_COUNT))
print(length)

# Define a tuple of frame need to get
frame = (0, math.ceil(length/2), length - 1)

# Get the frame
for f in frame:
    vidcap.set(1, f)
    _, image = vidcap.read()
    cv2.imwrite("/home/data/output/frame%d.jpg" % f, image)

它确实保存了最后一帧图像,但它没有任何数据。

我的代码有什么问题吗?

更新:

根据这个post,似乎cv2.CAP_PROP_FRAME_COUNT 可以计算错误的帧数。

那么有没有更好的方法来获取帧数而不读取整个帧?

【问题讨论】:

    标签: python opencv


    【解决方案1】:
    vidcap = cv2.VideoCapture("/home/data/input/video.MOV")
    count = 1
    
    while 1:
        ret , frame = vidcap.read()
        count += 1
        if ret == False:
           break
    
    print(count)
    

    可能会出现输入错误,但您可以理解。

    【讨论】:

    • 这个我们必须通读视频,我只是想找到一种不那样做的方法。不管怎样,谢谢你的回答。
    • 好的,你可以使用 video.get(cap.prob.fps) 并使用这个值的负 100,所以在首先得到最后一帧的确切值之后,在另一个 while 循环中你可以停止这个数字的循环并获取帧,这样会减少处理时间
    猜你喜欢
    • 1970-01-01
    • 2013-05-29
    • 2012-11-27
    • 1970-01-01
    • 2023-01-25
    • 1970-01-01
    • 1970-01-01
    • 2013-05-08
    • 1970-01-01
    相关资源
    最近更新 更多