Я столкнулся с этой интересной ситуацией ( Ускорение оптического потока (createOptFlow_DualTVL1) ), но это не относится к моим потребностям.Моя общая проблема заключается в том, что я хочу максимально ускорить выполнение следующего кода, если он применим.Имейте в виду, я хочу, чтобы кадры были в оттенках серого и изменили их размер до height = 300
, сохраняя соотношение сторон.Кроме того, я хочу сэмплировать 2 кадра в секунду из этого видео, поэтому я предполагаю, что каждое видео будет около 30fps
.Наконец, я хочу использовать алгоритм оптического потока TV-L1.Есть ли способ улучшить этот алгоритм, потому что для 1-минутного видео требуется около 3 минут, чтобы оценить оптический поток, который слишком трудоемок для моих нужд.
Заранее спасибо, Эван
import math, imutils, cv2
print ("Entering Optical Flow Module...")
cap = cv2.VideoCapture(video_path)
current_framerate = cap.get(5)
ret, frame1 = cap.read()
prvs = cv2.cvtColor(frame1,cv2.COLOR_BGR2GRAY)
prvs = imutils.resize(prvs, height = 300)
all_frames_flow=list()
while(cap.isOpened()):
frameId = cap.get(1)
ret, frame2 = cap.read()
if ret == True:
if (frameId % (math.floor(current_framerate)/2)==0): # assume videos are 30 fps and we want only 2 frames per second.
next = cv2.cvtColor(frame2,cv2.COLOR_BGR2GRAY)
next = imutils.resize(next, height = 300)
optical_flow = cv2.DualTVL1OpticalFlow_create()
flow = optical_flow.calc(prvs, next, None)
all_frames_flow.append(flow)
prvs = next
else:
continue
else:
break
cap.release()