time.sleep只有部分代码在无限循环内

时间:2018-05-30 17:14:31

标签: python python-3.x opencv time 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),但它阻止等待30秒通过的while循环。有没有办法在这种情况下使用time.sleep,或者另一种适合我需要的方法?

提前致谢

3 个答案:

答案 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