我正在处理使用OpenCV分析实时流中帧的代码,如果满足条件,则将当前帧保存到文件中。
逐帧分析视频的无限循环是这样的:
while True:
ret,frame = stream.read()
if conditionisMet :
pil_image = Image.fromarray(frame)
pil_image.save("/path/to/folder/image.jpg")
cv2.imshow("LiveStream", frame)
我想要补充的是,如果过早地(20-30秒)再次满足条件,则不必保存图像,而while循环必须抓住另一帧并继续其工作。我在if语句中尝试使用time.sleep(30.0)
,但它阻止等待30秒通过的while循环。有没有办法在这种情况下使用time.sleep
,或者另一种适合我需要的方法?
提前致谢
答案 0 :(得分:2)
last_grab=time.time()-30 # this to get things started
while True:
if condition and time.time()-last_grab > 30:
last_grab=time.time()
# Do things here
else:
continue
答案 1 :(得分:1)
只需添加一个变量即可跟踪上次保存时间:
last_save_time = time.time()
while True:
ret,frame = stream.read()
if conditionisMet and time.time() - last_save_time() > 20:
pil_image = Image.fromarray(frame)
pil_image.save("/path/to/folder/image.jpg")
# update last save time
last_save_time = time.time()
cv2.imshow("LiveStream", frame)
答案 2 :(得分:1)
为什么不捕捉运行的时间,然后保存图像,如果大于给定的时间....
a = dt.now()
b = dt.now()
c = b - a
if c < x:
do something