【发布时间】:2019-04-12 00:59:12
【问题描述】:
我遇到了这种有趣的情况 (Speeding up optical flow (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()
【问题讨论】:
标签: python algorithm opencv optimization opticalflow