C++ 如何通过引用传递opencv mat

C++ 如何通过引用传递opencv mat,c++,pass-by-reference,opencv3.0,C++,Pass By Reference,Opencv3.0,我有1个矩阵(3通道)->cv::Mat通道[3] &3矩阵(1通道)->cpu_过滤器0、cpu_过滤器90、cpu_过滤器120 以前我做过这样的事情 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::Ma

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

&3矩阵(1通道)->cpu_过滤器0、cpu_过滤器90、cpu_过滤器120

以前我做过这样的事情

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频道[3]创建多通道矩阵?因为这不是它所做的,所以它创建了一个包含3个矩阵的c样式数组

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

然后,阅读“详细说明”一段

总而言之,创建cv::Mat有不同的方法,例如:

cv::Mat m(10, 10, CV_32FC3);
这将创建一个10x10矩阵,其中包含3个32位浮点数通道。可以找到其他值。只需为所需的频道数添加“C”

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

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

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

是的,那帮了我很多忙!我认为这个答案遗漏了cv::Mat类的一个要点。它只是一个标题,下面有一个托管数组。它通常在赋值中使用浅拷贝,因此通过引用传递参数不会节省太多。该类是指针大小的2-3倍。