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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java Open CV 3.4.2如何从Mat对象中提取不同的通道?相关的知识,希望对你有一定的参考价值。

目前我正在尝试移植一个使用Open CV到Java的Python程序。

这是我试图翻译的原始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版本中似乎已经发生了很大的变化,本页面上的先前答案对我没有帮助。

答案

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

extractChannel function能够很容易地解决这个问题:

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

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

以上是关于Java Open CV 3.4.2如何从Mat对象中提取不同的通道?的主要内容,如果未能解决你的问题,请参考以下文章

open cv mat怎样将数据类型转化为double

如何将 cv::mat 对象从 python 模块传递给 c++ 函数并返回返回的 cv::mat 类型的对象?

如何将单个图像从图像矢量复制到临时 cv::Mat?

如何从 c++ 接口 cv::Mat 转换为 c IplImage?

如何从 cv::Mat 转换为 CvArr?

如何使用模板函数从缓冲区(T* 数据数组)创建 cv::Mat?