目前我正在尝试移植一个使用Open CV到Java的Python程序。
这是我试图翻译的原始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版本中似乎已经发生了很大的变化,本页面上的先前答案对我没有帮助。
上周解决了它,忘了回答这个问题。
extractChannel function能够很容易地解决这个问题:
Mat U = new Mat();
Mat V = new Mat();
extractChannel(flow, U, 0);
extractChannel(flow, V, 1);
真的很抱歉这个愚蠢的问题,但我在这里找不到类似的东西。