我有两个图像(frame1和frame2),我可以使用opencv计算u,v:
flow = cv2.calcOpticalFlowFarneback(prvs,next, 0.5, 1, 3, 15, 3, 5, 1, 0)
我想使用这个u来翻译frame1,v使用各种光流方法量化差异的质量。我打算使用这些u,v。
进行推断有没有一种简单的方法可以达到这个目的?
答案 0 :(得分:6)
计算简单翻译的一种方法是平均流量:
table {
overflow: auto;
height: 100px;
table-layout: fixed;
width: 100%;
}
这给出了翻译所需的向量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)))
最后,执行cv2.remap
:
pixel_map = R2 + flow