【问题标题】:Convection of an image using optical flow使用光流的图像对流
【发布时间】:2017-11-16 00:49:32
【问题描述】:

我有两个图像(frame1 和 frame2),我可以使用 opencv 计算 u,v:

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

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

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

【问题讨论】:

  • 什么是(u,v)
  • 哦,你的意思是每个点都附有一个(u,v) 向量吗?
  • 是的。我想这可以解决我的问题,但我无法在 python 中转换 Point 的等价物。 stackoverflow.com/questions/17459584/…

标签: python opencv scikit-image


【解决方案1】:

计算简单翻译的一种方法是平均流:

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

这给出了翻译所需的向量(avg_u, avg_v)


关于您的 cmets,您似乎想将每个像素 (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)

【讨论】:

  • 有趣的是,使用 R2+ 流的结果比 R2 流的结果差很多。我用它来推断。
猜你喜欢
  • 2021-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-28
  • 1970-01-01
相关资源
最近更新 更多