我一直在运行官方文档页面给出的Dense Optical Flow的Python实现代码。在代码的某一行,他们使用
mag, ang = cv2.cartToPolar(流[...,0],流[...,1])。
当我打印 mag 的值时,我得到这些 -
Please check this image for the output I'm getting
我不知道如何理解这个输出。
我的最终目标是使用光流来获得每一帧的合成或平均运动值。
最佳答案
引用您使用的相同 OpenCV 教程
We get a 2-channel array with optical flow vectors, (u,v).
那是密集光流的输出。基本上它会告诉您每个点如何以矢量方式移动。 (u,v)
只是向量的笛卡尔表示,它可以转换为极坐标,这意味着角度和大小。
角度是像素移动的方向。大小是像素移动的距离。
在许多算法中,您可以使用幅度来了解像素是否移动(例如,小于 1 表示没有移动)。或者,如果您正在跟踪一个您知道初始位置(即对象的像素位置)的对象,您可能会找到大部分像素移动到的位置,并使用该信息来确定新位置。
顺便说一句,除非指定,否则 cartToPolar 会返回以弧度为单位的角度。以下是文档的摘录:
cv2.cartToPolar(x, y[, magnitude[, angle[, angleInDegrees]]]) → magnitude, angle
angleInDegrees
必须是 True
如果您需要以度为单位。
关于opencv - 当我们运行密集光流 (farnnback) 时,输出到底是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46924869/