【问题标题】:What exactly is the output when we run the dense optical flow (farnnback)?当我们运行密集光流(farnnback)时,输出到底是什么?
【发布时间】:2018-04-06 02:20:40
【问题描述】:

我一直在运行官方文档页面给出的 Dense Optical Flow 的 Python 实现代码。在代码的某一行,他们使用
mag, ang = cv2.cartToPolar(流[...,0], 流[...,1])。 当我打印 mag 的值时,我得到了这些 - Please check this image for the output I'm getting

我不知道如何理解这个输出。

我的最终目标是使用光流来获得每一帧的合成或平均运动值。

【问题讨论】:

    标签: opencv opticalflow


    【解决方案1】:

    引用您使用的相同 OpenCV 教程

    我们得到一个带有光流向量 (u,v) 的 2 通道阵列。

    那是密集光流的输出。基本上,它会告诉您每个点如何以矢量方式移动。 (u,v) 只是向量的笛卡尔表示,可以转换为极坐标,即角度和大小。

    角度是像素移动的方向。幅度是像素移动的距离。

    在许多算法中,您可以使用幅度来了解像素是否移动(例如,小于 1 意味着没有移动)。或者,如果您正在跟踪一个您知道初始位置(即对象的像素位置)的对象,您可能会找到大部分像素移动到的位置,并使用该信息来确定新位置。

    顺便说一句,cartToPolar 以弧度返回角度,除非指定。这是文档的摘录:

    cv2.cartToPolar(x, y[, magnitude[, angle[, angleInDegrees]]]) → magnitude, angle
    

    angleInDegrees 必须是 True 如果您需要度数。

    【讨论】:

    • 非常感谢先生,您的见解。我想知道有没有办法可以找到整个视频的平均运动?比如说第 199 帧的总运动约为 14.035,同样有没有办法让我获得帧以及该帧中跨越整个视频的总平均运动值?
    • @AdaMStrange 来计算你需要一个参考帧和一个新帧的运动,如果你为第 199 帧做,你需要选择一个参考帧......可能是第 1 帧或第 198 帧。然后您可以平均幅度并说出此帧中相对于参考的平均移动。在视频中也是如此,您必须定义什么是您的参考帧并获得像素运动。需要注意的是,如果两个图像完全不同(例如场景变化),您可能会得到不希望的结果。要获取视频帧,请使用 OpenCV 中的 VideoCapture
    • @AdaMStrange 还有一件事,这种方法很慢,如果只是图像的一部分,请先裁剪它,或者使用稀疏方法。
    • 我尝试使用像 LK 这样的稀疏方法。我参考了这个答案stackoverflow.com/questions/4117914/the-average-of-optical-flow 来找到平均值。但是当我取帧之间的差异时,差异几乎为零。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-22
    • 2012-06-17
    • 2020-03-23
    • 2016-11-03
    • 1970-01-01
    • 2011-01-21
    • 2013-03-18
    相关资源
    最近更新 更多