Нарисуйте круг каждую секунду в видео - PullRequest
0 голосов
/ 23 января 2019

У меня есть несколько точек, которые будут отображаться в видео в секунду для отслеживания объекта.

Я могу легко читать видео, используя 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' в каждом кадре.Но я хочу рисовать их каждую секунду, как я могу это сделать?

Ответы [ 3 ]

0 голосов
/ 23 января 2019

Я не совсем уверен, возможно ли это, но только мысль.

Если вы знаете FPS для видео, можете ли вы просто создать счетчик, который может определить, сколько секунд прошло, сколько кадров прошло?

Например, если у вас есть видео со скоростью 60 кадров в секунду, вы можете рассчитывать на 60 кадров, чтобы знать, что прошла секунда.

0 голосов
/ 24 января 2019

Я получил решение:

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()
0 голосов
/ 23 января 2019

Вы можете просто установить значение waitKey на 1000, чтобы подождать секунду.

...