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

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

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

长风秋雁 2021-08-25 10:17:21
目前我正在尝试将使用 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贡献1906条经验 获得超10个赞

该extractChannel功能能够非常容易地解决这个问题:


    Mat U = new Mat();

    Mat V = new Mat();

    extractChannel(flow, U, 0);

    extractChannel(flow, V, 1);

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


查看完整回答
反对 回复 2021-08-25
  • 1 回答
  • 0 关注
  • 185 浏览

添加回答

举报

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