10秒后如何在循环中结束循环?

时间:2019-04-26 11:35:45

标签: python opencv datetime

我正在使用opencv,而不是在视频上使用典型的while循环,而是在内部运行额外的while循环以实现其他功能。我的目标是激活后的第二个while循环结束并在10秒后中断所有循环。

到目前为止,我已经使用datetime创建了一个time_start变量,然后尝试使用time_delta变量来查找时间的变化,并且while循环在达到值之后会中断10.我只有几周的python经验,所以我可能犯了一个简单的错误。这是我要执行的代码(您可以忽略“主要功能”代码):

start_time = datetime.datetime.now()
end_time = 0

while end_time < datetime.datetime.now():

    ret, frame = cap.read( )

    if point1 and point2:

        end_time =start_time + datetime.timedelta(seconds=10)

        if has_run == 0:
            gray_get()
            has_run = 1


        ######### MAIN FUNCTIONS ######################################
        cv2.rectangle(frame, point1, point2, (0, 0, 0), 2)
        first_frame_roi = first_frame[point1[1]:point2[1], point1[0]:point2[0]]
        cropped_window = frame[point1[1]:point2[1], point1[0]:point2[0], :]
        gray = cv2.cvtColor(cropped_window, cv2.COLOR_BGR2GRAY)
        flow = cv2.calcOpticalFlowFarneback(prev_gray, gray, None,.5, 6, 15, 3, 5, 1.1, 0)
        prev_gray = gray
        mag, ang = cv2.cartToPolar(flow[..., 0], flow[..., 1])
        mag_list.append(mag)
        cv2.imshow('optical flow', draw_flow(gray, flow))
        #################################################################

    cv2.imshow('Original', frame)

    key = cv2.waitKey(30) & 0xff
    if key == 27:
         break

cap.release()
cv2.destroyAllWindows()

2 个答案:

答案 0 :(得分:1)

运行while循环10秒的另一种方法是使用datetime模块。

import datetime

start_time = datetime.datetime.now()
#end time is 10 sec after the current time
end_time = start_time + datetime.timedelta(seconds=10)

#Run the loop till current time exceeds end time
while end_time > datetime.datetime.now():
    #do stuff

这里的一个优点是您还可以使用datetime.timedelta函数以分钟和小时为单位定义时间间隔

答案 1 :(得分:0)

import time
endTime_s = time.time() + 10.0
while time.time() < endTime_s:
    doStuff()