猿问

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

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


holdtom
浏览 252回答 1
1回答

青春有我

上周解决了,忘记回答这个问题了。该extractChannel功能能够非常容易地解决这个问题:    Mat U = new Mat();     Mat V = new Mat();     extractChannel(flow, U, 0);     extractChannel(flow, V, 1);真的很抱歉这个愚蠢的问题,但我在这里找不到类似的东西。
随时随地看视频慕课网APP

相关分类

Python
我要回答