如何通过引用传递opencv mat

how to pass opencv mat by reference

我有 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};

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

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

首先,确保您熟悉该语言 (C++) 以及(C 风格)数组的工作原理(我找到了 this tutorial,但我还没有读过)。

然后,阅读段落 "Detailed Description" here

总而言之,创建cv::Mat的方法有很多种,例如:

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

这将创建一个 10x10 矩阵,其中包含 3 个通道的 32 位浮点数。可以找到其他值 here。只需为您想要的频道数添加 "C"。

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

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

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