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

GGEv

我遇到了这个有趣的情况(加速光流(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 :数值方案中使用的停止准则阈值,这是精度和运行时间之间的权衡。较小的值将以较慢的收敛为代价产生更准确的解。

其他要调整的参数可以在这里找到

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

加速OpticalFlow算法-OpenCV

来自分类Dev

OpenCV光流断言

来自分类Dev

opencv(CalcOpticalFlowPyrLK)参数中的光流类别

来自分类Dev

opencv(CalcOpticalFlowPyrLK)参数中的光流类别

来自分类Dev

如何在OpenCV Python中找到实时视频流(Android IPWebcam)的光流?

来自分类Dev

OpenCV的密集光流(Farneback)功能输出什么?如何在Python中使用它来构建光流图?

来自分类Dev

opencv中的KMeans算法

来自分类Dev

使用OpenCV的光流-水平和垂直分量

来自分类Dev

opencv光流无法检测到大多数矢量

来自分类Dev

使用OpenCV的光流-水平和垂直分量

来自分类Dev

如何使用OpenCV(Python)捕获视频流

来自分类Dev

使用FFmpeg,Python和OpenCV显示流

来自分类Dev

OpenCV 捕获多个 RTSP 流 - Python

来自分类Dev

使用 Python openCV 从实时馈送(网络摄像头)中提取光流作为数据(数字)

来自分类Dev

OpenCV / Python中的粗线

来自分类Dev

python openCV debayer

来自分类Dev

opencv python VideoWriter的问题

来自分类Dev

从Python使用OpenCV TLD

来自分类Dev

Python OpenCV背景扣除

来自分类Dev

OpenCV Python性能

来自分类Dev

相机校准OpenCV Python

来自分类Dev

CascadeClassifier的Python OpenCV错误

来自分类Dev

Python + OpenCV + Pytesseract建议

来自分类Dev

OpenCV边界矩形(Python)

来自分类Dev

Python opencv问题

来自分类Dev

Python OpenCV错误

来自分类Dev

python opencv背景减法

来自分类Dev

从Python使用OpenCV TLD

来自分类Dev

OpenCV + Python自动取样