此刻,我正尝试将使用Open CV的Python程序移植到Java。
这是我要翻译的原始Python代码:
flow = cv2.calcOpticalFlowFarneback(prev, next, flow, pyr_scale, levels, winsize, iterations, poly_n, poly_sigma, flags)
u=flow[...,0]
v=flow[...,1]
在Java中(使用org.bytedeco.javacpp),计算光流非常简单,但是我在计算各自的 u 和 v 变量时遇到了麻烦。
假设以下Java代码:
calcOpticalFlowFarneback(image1, image2, flow, pyr_scale, levels, winsize, iterations, poly_n, poly_sigma, flags);
如果我没有误解有关 Mat 对象流的任何信息:
流矩阵包含2帧之间运动的梯度。对于原始帧中的每个像素位置,通道包含dx和dy,因此prev_x + dx = cur_x,并且prev_y + dy = cur_y。 -calcopticalflowfarneback answer
因此,为了提取分别对应于dx和dy的 u 和 v 向量(如果我很傻,请纠正我),我需要将 Mat 流对象的两个不同通道。
我该怎么做?到目前为止,我已经尝试了几种没有成功的方法。在最新的 opencv 版本中似乎发生了很大变化,并且此页面上的先前答案对我没有帮助。
答案 0 :(得分:0)
上周解决了这个问题,却忘了回答这个问题。
extractChannel function能够非常轻松地解决此问题:
Mat U = new Mat();
Mat V = new Mat();
extractChannel(flow, U, 0);
extractChannel(flow, V, 1);
真的很抱歉这个愚蠢的问题,但是我在这里找不到类似的东西。