如何通过参考传递opencv mat

时间:2018-09-18 09:49:18

标签: c++ pass-by-reference opencv3.0

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

想知道什么是正确的方法吗?

1 个答案:

答案 0 :(得分:2)

您是说您使用cv::Mat channels[3];来创建多渠道矩阵吗?因为这不是这样做的,所以将创建具有3个矩阵的c样式数组。

首先,请确保您熟悉该语言(C ++)和(C样式)数组的工作方式(我发现this tutorial,但我没有读过它)。

然后,阅读“详细说明” here段落。

总结起来,有多种创建cv :: Mat的方法,例如:

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

这将创建一个具有3个32位浮点数通道的10x10矩阵。可以找到其他值here。只需在所需的频道数上添加“ C”即可。

现在,如何通过它们作为参考?一如既往:

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

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