代码可能出错并在特定的fps下使用opencv提取帧?

时间:2017-05-23 12:43:07

标签: python opencv video-processing opencv3.1

我相信此代码可能存在错误,因为它可以保存比计算时更多的图像(fps *秒)。它还在最后保存NULL图像。我觉得这是保存图像的最基本代码,我不确定错误是什么。

另外,我想要一个选项来指定我拍摄图片的fps率。我最想使用的fps是1 fps。我无法在opencv中找到允许我们指定此功能的功能,因此我正在考虑采用某种方式在每秒保存帧。另一种方法可以是保存所有帧,但是每秒迭代并使用帧。我对这些概念很新。这些方法是否良好,我应该如何开始编码?我不知道从哪里开始。

def extractFrames():

vidcap = cv2.VideoCapture('video.AVI')  
success,image = vidcap.read()
count = 0;
while success:
    success,image = vidcap.read()
    cv2.imwrite("%d.jpg" % count, image)
    count += 1

1 个答案:

答案 0 :(得分:0)

这应该按照您的要求执行:

import time,cv2
import numpy as np
def extractFrames(n):
    """
    extract image from a live video frame at n fps, 
    if the n is smaller than the fps of the camera
    """
    vidcap = cv2.VideoCapture('video.AVI')  
    now = time.time()
    success,image = vidcap.read()
    real_fps = 1.0/(time.time()-now);

    if n > real_fps:
        print('real fps is smaller than what you want , change to less than '+real_fps)
        return

    while success:
        now = time.time()
        success,image = vidcap.read()
        cv2.imwrite("%d.jpg" % count, image)
        ch = 0xFF & cv2.waitKey(1)
        if ch == 27:
            break
        time.sleep((1.0/n) - (time.time() - now));


    cv2.destroyAllWindows()
extractFrames(1)

P.S:

我建议使用像 Pygame 这样的库来进行事件循环和绘图,而不是使用Opencv的函数