目前我正在尝试将使用 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);如果我没有弄错有关流垫对象的任何信息:流矩阵包含 2 帧之间的运动梯度。对于原始帧中的每个像素位置,通道包含 dx 和 dy,因此 prev_x + dx = cur_x,并且 prev_y + dy = cur_y。- calcopticalflowfarneback 答案因此,为了提取分别对应于 dx 和 dy的u和v向量(如果我很傻,请纠正我),我需要拆分Mat流对象的两个不同通道。我怎样才能做到这一点?到目前为止,我已经尝试了一些方法但没有成功。在最新的opencv版本中似乎发生了很多变化,并且此页面上的先前答案对我没有帮助。
1 回答
青春有我
TA贡献1784条经验 获得超8个赞
上周解决了,忘记回答这个问题了。
该extractChannel功能能够非常容易地解决这个问题:
Mat U = new Mat(); Mat V = new Mat(); extractChannel(flow, U, 0); extractChannel(flow, V, 1);
真的很抱歉这个愚蠢的问题,但我在这里找不到类似的东西。
添加回答
举报
0/150
提交
取消