【问题标题】:OpenCV Python Video capture - can someone check my codeOpenCV Python视频捕获 - 有人可以检查我的代码
【发布时间】:2014-10-01 00:22:02
【问题描述】:

这是我的代码。我想知道我的网络摄像头的帧速率。由于某种原因,获取 fps 属性的 cap.get(5) 不适用于实时捕获。所以我试图做一个工作来计算没有。在每个循环中拍摄的帧数。我使用 time.time() 函数来获取每帧之间的时间(使用它我可以计算一秒钟内的帧数)。我得到的结果约为 0.128。 但我现在的问题是 cv2.waitKey(x)。即使我用 1 或 10 或 100 代替 x,结果仍然相同。是的,我知道 x 以毫秒为单位。但是如果我把 x 设为 100,我应该得到 0.2 对吧?这里有什么问题? 任何帮助,将不胜感激。此外,如果有人可以帮助我计算 fps,我会很高兴。 PS。这一切都是因为我使用 OpenCV 保存的视频总是显得太快,即快进..

注意:如果我把 x 设为 1000,那么我得到 2.128。

import numpy as np
import cv2
import time

cap = cv2.VideoCapture(0)
#print cap.get(5)

# Define the codec and create VideoWriter object
fourcc = cv2.cv.CV_FOURCC(*'XVID') 
out = cv2.VideoWriter('output1.avi',fourcc, 10, (640,480))

while(cap.isOpened()):
    start = time.time()
    ret, frame = cap.read()
    if ret==True:
        frame = cv2.flip(frame,1) 

        # write the flipped frame
        out.write(frame)        

        cv2.imshow('frame',frame)

        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    else:
        break


    end = (time.time() - start)
    print end

# Release everything if job is finished
cap.release()
out.release()
cv2.destroyAllWindows()

【问题讨论】:

    标签: python opencv video time camera


    【解决方案1】:

    我会尝试按照此处的建议聚合它们:OpenCV: VideoCapture::get(CV_CAP_PROP_FPS) returns 0 FPS

    类似:

    import numpy as np
    import cv2
    import time
    
    cap = cv2.VideoCapture(0)
    #print cap.get(5)
    
    # Define the codec and create VideoWriter object
    fourcc = cv2.cv.CV_FOURCC(*'XVID')
    
    num_frames = 0
    
    start = time.time()
    while(cap.isOpened()):
    
        ret, frame = cap.read()
        if num_frames < 500:
            frame = cv2.flip(frame,1)
            num_frames = num_frames + 1;
        else:
            break
    
    
    total_time = (time.time() - start)
    fps = (num_frames / total_time)
    print str(num_frames) + ' frames in ' + str(total_time) + ' seconds = ' + str(fps) + ' fps'
    
    # Release everything if job is finished
    cap.release()
    cv2.destroyAllWindows()
    

    【讨论】:

    • 您发布的代码没有输出 编辑:哦。那是因为你给了“如果 num_frames
    • 是的,如果您希望其他程序正确播放,您应该使用该帧率。我同意,7.8fps 相当慢。通常我在guvcview 中打开相机并在那里更改它们的设置。这通常会告诉您相机在不同分辨率下可以达到的速率。
    • guvcview 显示我的网络摄像头帧速率为 25fps,分辨率为 640x480。那么,应该是程序本身的限制吧?
    • 它是否提供了 OpenCV 可能使用的其他选项(如更高分辨率)?我发现 OpenCV 通常可以快速捕获。
    • 是的 guvcview 显示更高和更低分辨率的选项。还有一个30fps的选项。那是最高的。我怎么知道 OpenCV 使用的是什么分辨率?在 VideoWriter 中,它已设置为 640x480。
    猜你喜欢
    • 2018-09-19
    • 2016-01-09
    • 1970-01-01
    • 2016-09-18
    • 1970-01-01
    • 2022-11-02
    • 2020-12-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多