我正在使用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()
答案 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()