簡體   English   中英

加速光流算法(如果適用)Python OpenCV

[英]Speed Up Optical Flow algorithm (If applicable) Python OpenCV

我遇到了這個有趣的情況( 加速光流(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()

對於 cv2 版本“'4.1.0'”:

根據下面對超參數的解釋,下面的代碼速度更快,但准確性較低。 調整這些參數以根據要求解決速度與准確度的權衡問題。

optical_flow= cv2.optflow.DualTVL1OpticalFlow_create(nscales=1,epsilon=0.05,warps=1)
flow = optical_flow.calc(new_prvs, new_nxt, None)
  • int "nscales" : 用於創建圖像金字塔的比例數。

  • int "warps" : 每個尺度的扭曲數。 表示每個尺度計算 I1(x+u0) 和 grad( I1(x+u0) ) 的次數。 這是保證方法穩定性的參數。 它還影響運行時間,因此它是速度和准確性之間的折衷。

  • double epsilon :數值方案中使用的停止准則閾值,這是精度和運行時間之間的權衡。 較小的值將以較慢的收斂為代價產生更准確的解。

其他要調整的參數可以在這里找到

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM