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