2012-09-28 41 views
3
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) 

上面是一個簡單的python代碼,使用opencv libraray來播放視頻文件。QueryFrame如何工作?

我不明白,只有一部分是im = cv.QueryFrame(invideo)

根據opencv api,「QueryFrame從攝像機或視頻文件抓取一幀,將其解壓縮並返回。」

爲了我的理解,它只是返回一個圖像iplimage格式爲一個單一的幀,但它是如何知道它返回的幀?唯一的參數QueryFrame需要的是視頻捕獲,但是沒有索引來告訴它我需要檢索哪個幀數量的視頻幀。如果我需要從中間部分開始播放視頻怎麼辦?

回答

0

您必須使用帶有CV_CAP_PROP_FRAME_COUNT的cv.GetCaptureProperty來獲取視頻的幀數。 將它除以2找到中間。 使用QueryFrame,直到達到此值。