import cv

# create a window
winname = "myWindow"
win = cv.NamedWindow(winname, cv.CV_WINDOW_AUTOSIZE)

# load video file
invideo = cv.CaptureFromFile("video.avi")

# interval between frame in ms.
fps = cv.GetCaptureProperty(invid, cv.CV_CAP_PROP_FPS)
interval = int(1000.0 / fps)

# play video
while (True):
    im = cv.QueryFrame(invideo)
    cv.ShowImage(winname, im)
    if cv.WaitKey(interval) == 27: # ASCII 27 is the ESC key
        break

del invideo
cv.DestroyWindow(winname)

上面是使用opencv libraray播放视频文件的简单python代码。

我唯一不了解的部分是im = cv.QueryFrame(invideo)
根据 opencv api 的说法,“QueryFrame从摄像机或视频文件中抓取一帧,将其解压缩并返回。”

以我的理解,它只返回iplimage格式的一帧图像,但是如何知道返回的帧? 所需的唯一参数QueryFrame是视频捕获,但是没有索引可以告诉它我需要检索视频帧的帧数。如果我需要从中间开始播放视频怎么办?

最佳答案

您必须将cv.GetCaptureProperty与CV_CAP_PROP_FRAME_COUNT一起使用才能获取视频的帧数。
将其除以2可找到中间值。
使用QueryFrame,直到达到此值。

关于python - QueryFrame如何工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12635112/

10-15 00:39