使用光流对图像进行对流



我有两个图像(frame1和frame2(,我能够使用opencv计算u,v:

flow = cv2.calcOpticalFlowFarneback(prvs,next, 0.5, 1, 3, 15, 3, 5, 1, 0)

我想使用这个u,v来翻译frame1,以使用各种光流方法量化差异的质量。我打算使用这些u,v进行推断。

有没有一个简单的方法来实现这一点?

计算简单转换的一种方法是平均流量:

avg_u = np.mean(flow[:, :, 0])
avg_v = np.mean(flow[:, :, 1])

这为矢量提供了翻译所需的(avg_u, avg_v)


关于您的评论,您似乎想将每个像素(x,y)移动到其流矢量(u(x,y), v(x,y))指定的位置。

首先,生成一个笛卡尔网格:

height, width = flow.shape[0, 1]
R2 = np.dstack(np.meshgrid(np.arange(width), np.arange(height)))

然后,所需的映射只是将此网格与流相加:

pixel_map = R2 + flow

最后,执行cv2.remap

new_frame = cv2.remap(prev_frame, pixel_map)

最新更新