У меня есть несколько точек, которые нужно отображать в видео в секунду для отслеживания объектов.
Я могу легко прочитать видео, используя VideoCapture из opencv. Но когда я рисую круги на видеокадре, рисование происходит быстрее по сравнению с видеокадрами.
cap = cv2.VideoCapture('video.mp4')
radius = [None]*10
radius = (1,2)
radius.append((2,3))
radius.append((3,4))
radius.append((4,5))
radius.append((5,6))
while(cap.isOpened()):
ret, frame = cap.read()
for i in range(len(radius)):
cv2.circle(frame, radius[i], 5, (0,0,255), -1)
cv2.imshow('test', frame) # draw
each_second += 1
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
В этом случае я рисую число «n» кругов в каждом кадре. Но я хочу рисовать их каждую секунду, как мне это сделать?






Вы можете просто установить значение waitKey равным 1000, чтобы подождать секунду.
Я не совсем уверен, возможно ли это, но просто мысль.
Если вы знаете FPS для видео, можете ли вы просто сделать счетчик, который может сказать, прошла ли секунда, сколько кадров прошло?
Например, если у вас есть видео с частотой 60 кадров в секунду, вы можете рассчитывать на 60 кадров, чтобы знать, что прошла секунда.
спасибо да, это возможно, у меня сработало отлично :) (проверьте вопрос для решения) извините, я не знаю, как добавить решение отдельно
Я получил решение:
cap = cv2.VideoCapture('video.mp4')
radius = [None]*10
radius = (1,2)
radius.append((2,3))
radius.append((3,4))
radius.append((4,5))
radius.append((5,6))
while(cap.isOpened()):
ret, frame = cap.read()
time_passed = int(cap.get(cv2.CAP_PROP_POS_MSEC))
if time_passed % 1000 ==0:
print(time_passed)
# draw circles
for i in range(len(radius)):
cv2.circle(frame, radius[i], 5, (0,0,255), -1)
cv2.imshow('test', frame) # draw
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
Я понял это, я просто добавил эти строки: time_passed = int(cap.get(cv2.CAP_PROP_POS_MSEC)) if time_passed% 1000 == 0: print(time_passed)