如何通过引用传递opencv mat

问题描述 投票:1回答:1

我有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-reference opencv3.0
1个回答
2
投票

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

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

然后,阅读段落“详细说明”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);
© www.soinside.com 2019 - 2024. All rights reserved.