OpenCV Python 视频捕捉 - 能帮我检查一下代码吗
这是我的代码。我想知道我的网络摄像头的帧率。出于某种原因,cap.get(5)
这个用来获取帧率的属性在实时捕捉时不起作用。所以我尝试了一种变通的方法,计算每次循环中捕捉到的帧数。我使用了time.time()
函数来获取每帧之间的时间(通过这个我可以计算出每秒的帧数)。我得到的结果大约是0.128
,但我现在的问题是cv2.waitKey(x)
。即使我把x替换成1、10或100,结果还是一样。
是的,我知道x是以毫秒为单位的。但如果我把x设为100,我应该得到0.2,对吧?这里到底出了什么问题?
任何帮助都将不胜感激。如果有人能帮我计算帧率,我会很高兴。
附注:这一切都是因为我用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
我会尝试按照这里的建议来处理它们: OpenCV: VideoCapture::get(CV_CAP_PROP_FPS) 返回 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()