首页 > 解决方案 > 如何通过引用传递opencv mat

问题描述

我有 1 个矩阵(3 通道)-> cv::Mat 通道[3];

& 3 矩阵 (1channel) -> cpu_filter0,cpu_filter90,cpu_filter120

以前我做过这样的事情,

cv::Mat cpu_filter0,cpu_filter90,cpu_filter120
cv::Mat channels[] = {cpu_filter0,cpu_filter90,cpu_filter120}

但现在我想做这样

cv::Mat cpu_filter0,cpu_filter90,cpu_filter120
cv::Mat channels3[3];
channels[0] = &cpu_filter0, channels[1] = &cpu_filter90, channels[0] = &cpu_filter120;

或通过,

cv::Mat channels3[] = {&cpu_filter0_0,&cpu_filter120_120,&cpu_filter240_240};

想知道这样做的正确方法是什么?

标签: c++pass-by-referenceopencv3.0

解决方案


你是说你用来cv::Mat channels[3];创建多通道矩阵吗?因为这不是它的作用,所以它创建了一个具有 3 个矩阵的 c 样式数组。

首先,确保您熟悉该语言(C++)以及(C 风格)数组如何工作(我找到了本教程,但我还没有阅读)。

然后,在此处阅读“详细说明”段落。

综上所述,创建 cv::Mat 有不同的方法,例如:

cv::Mat m(10, 10, CV_32FC3);

这将创建一个具有 3 个 32 位浮点数通道的 10x10 矩阵。其他值可以在这里找到。只需为您想要的频道数量添加“C”。

现在,如何将它们作为参考传递?一如既往:

void my_func(cv::Mat &param) {
    // do stuff
}

// in another function
cv::Mat m(10, 10, CV_32FC3);
my_func(m);

推荐阅读