Java Open CV 3.4.2如何从Mat Object中提取不同的通道?

时间:2018-08-31 20:19:48

标签: java python opencv migration

此刻,我正尝试将使用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 版本中似乎发生了很大变化,并且此页面上的先前答案对我没有帮助。

1 个答案:

答案 0 :(得分:0)

上周解决了这个问题,却忘了回答这个问题。

extractChannel function能够非常轻松地解决此问题:

    Mat U = new Mat();
    Mat V = new Mat();
    extractChannel(flow, U, 0);
    extractChannel(flow, V, 1);

真的很抱歉这个愚蠢的问题,但是我在这里找不到类似的东西。