Cha*_*uva 5 opencv opticalflow python-3.x
最近,我正在使用图像进行云运动跟踪,但在视频实现中使用的许多示例中,显示了根据跟踪的对象移动的颤动图。
\n\nQuiver 文档主要采用四个参数([X, Y], U, V),何时X和Y是起点和 U方向V。另一方面,基于该示例的p1光流以形状为(200,200)的图像的形状(m,n,l)返回(位移)。我的困惑在于如何对参数进行排序,因为也goodFeaturesToTrack返回与p1
\xc2\xbf如何连接两个组件来绘制云运动的颤动?
\n我找到了一个非常好的解决方案。我在这里使用汉堡出租车序列解释我的所有示例:
$ curl -O ftp://ftp.ira.uka.de/pub/vid-text/image_sequences/taxi/taxi.zip
$ unzip -q taxi.zip
Run Code Online (Sandbox Code Playgroud)
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])
Run Code Online (Sandbox Code Playgroud)
flow = cv.calcOpticalFlowFarneback(np.array(taxi1),
np.array(taxi2),
None, 0.5, 3, 15, 3, 5, 1.2, 0)
Run Code Online (Sandbox Code Playgroud)
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])
Run Code Online (Sandbox Code Playgroud)
该步骤是对选取的光流向量的数量进行下采样。x 位置从 0 到图像宽度,而 y 位置从图像高度到 0 反转(否则光流将上下颠倒)。在某些情况下,您必须更改步长,以便高度和宽度为可以被它整除。