python-3.x - 带有光流的箭袋图?

标签 python-3.x opencv opticalflow

最近我在使用图像进行云运动跟踪,但在许多示例中,当在视频实现中使用 时,会显示根据跟踪对象移动的颤动图。

Quiver 文档主要采用四个参数 ([X, Y], U, V),当 XY 是起点时以及 UV 方向。另一方面,基于this example的光流返回形状为 (200,200) 的图像的形状为 (m, n, l) 的 p1(位移)。我的困惑在于如何对参数进行排序,因为 goodFeaturesToTrack 返回的结果与 p1

相同

¿如何连接这两个组件来绘制云运动的颤动?

最佳答案

我找到了一个很好的解决方案。我在这里使用汉堡出租车序列解释我的所有示例:

  1. 下载出租车序列。
$ curl -O ftp://ftp.ira.uka.de/pub/vid-text/image_sequences/taxi/taxi.zip
$ unzip -q taxi.zip
  1. 获取所有图像并随机选择两个帧
from pathlib import Path
import numpy as np
import cv2 as cv
from PIL import Image
import matplotlib.pyplot as plt

taxis_fnames = list(Path('taxi').iterdir())
taxi1 = Image.open(taxis_fnames[rand_idx])
taxi2 = Image.open(taxis_fnames[rand_idx + 4])
  1. 计算光流
flow = cv.calcOpticalFlowFarneback(np.array(taxi1), 
                                   np.array(taxi2), 
                                   None, 0.5, 3, 15, 3, 5, 1.2, 0)
  1. 绘制箭袋
step = 3
plt.quiver(np.arange(0, flow.shape[1], step), np.arange(flow.shape[0], -1, -step), 
           flow[::step, ::step, 0], flow[::step, ::step, 1])

该步骤是对选取的光流矢量数量进行下采样。 x 位置从 0 到图像宽度,而 y 位置从图像高度反转(否则光流将上下颠倒)从图像高度到 0。在某些情况下,您将不得不更改步长,以便高度和被它整除。

  1. 生成的图像:

enter image description here

关于python-3.x - 带有光流的箭袋图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61943240/

相关文章:

django - 允许 Django 管理员更改字段是否为必填

python - 为什么我在 Django 中收到 "MySQL server has gone away"异常?

python-3.x - Flask-Sqlalchemy .in_() 方法对我不起作用

macos - OpenCV VideoWriter write() 函数在 C++ 中的 MAC 操作系统上失败

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

python - cv2.calcOpticalFlowPyrLK 输入图像的数据类型错误

python - 为什么 Python 枚举中的可变值是同一个对象?

c++ - 无法执行 Cython 包装的 Python 代码

OpenCV + HOG +SVM : help needed with SVM single feature vector

c++ - 我实际上如何在捕获的一半图像上设置光流?