[英]time.sleep for only a part of the code inside infinite while loop
我正在使用通过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)
,但是它阻塞了while循环,等待30秒过去。 在这种情况下,是否可以使用time.sleep
或其他适合我需要的方法?
提前致谢
您可以执行以下操作:
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
只需添加一个变量来跟踪您的上次保存时间:
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)
为什么不只是捕获运行时间,如果大于给定时间,则保存图像。
a = dt.now()
b = dt.now()
c = b - a
if c < x:
do something
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.