为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

holdtom 2021-05-31 12:35:17
目前我正在尝试将使用 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);

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


查看完整回答
反对 回复 2021-06-08
  • 1 回答
  • 0 关注
  • 251 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信