我使用flow = cv2.calcOpticalFlowFarneback()来计算视频中的光流,它为我提供了一个形状为 (height, width, 2) 的 numpy 数组,其中包含每个像素的Fx和Fy值 ( flow[: ,:,0] = Fx且流量[:,:,1] = Fy )。
为了计算散度,我使用 np.gradient ,如下所示:
def divergence_npgrad(flow):
Fx, Fy = flow[:, :, 0], flow[:, :, 1]
F = [Fx, Fy]
d = len(F)
return np.ufunc.reduce(np.add, [np.gradient(F[i], axis=i) for i in range(d)])
Run Code Online (Sandbox Code Playgroud)
接下来,我要计算旋度。我知道sympy.physicals.vector中有一个curl函数,但我真的不明白它是如何工作的或者它如何应用于我的流程。所以我想我也可以使用 np.gradient 来实现这一点。在 2D 中,我需要计算每个像素的dFy/dx - dFx/dy,所以我会这样:
def curl_npgrad(flow):
Fx, Fy = flow[:, :, 0], flow[:, :, 1]
dFx_dy = np.gradient(Fx, …Run Code Online (Sandbox Code Playgroud)