OpenCV Python视频捕获 - 有人可以检查我的代码

时间:2014-08-07 16:46:57

标签: python opencv video time camera

这是我的代码。我想知道我的网络摄像头的帧速率。出于某种原因,获得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()

1 个答案:

答案 0 :(得分:0)

尝试按照此处的建议聚合它们: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()