opencv - 当我们运行密集光流 (farnnback) 时,输出到底是什么?

标签 opencv opticalflow

我一直在运行官方文档页面给出的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/

相关文章:

opencv - 使用 OpenCV 检测正方形

c++ - 提取单个像素数据的最快方法?

opencv - KLT 在 OpenCV 中如何工作?

opencv - 光流适用于放大和缩小

c++ - Beaglebone Black 上的 QT-OpenCV

python - 使用 Python OpenCV 将图像捕获为数组

c++ - cv::goodFeaturesToTrack 不返回任何特征

c++ - 移动背景减法 (OpenCV)

c++ - 在光流路径区域周围创建边界框

python - 如何在python中找到每个SLIC超像素的质心?