使用光流对图像进行对流
Convection of an image using optical flow
我有两个图像(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)
我有两个图像(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)