如何通过引用传递OpenCV MAT

how to pass opencv mat by reference

本文关键字:OpenCV MAT 何通过 引用      更新时间:2023-10-16

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

& 3 矩阵 (1通道( -> 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 样式(数组的工作原理(我找到了本教程,但我还没有读过(。

然后,阅读此处的"详细说明"段落。

总而言之,有不同的方法可以创建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);