我相信此代码可能存在错误,因为它可以保存比计算时更多的图像(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
答案 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的函数