如何通过引用传递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 ¶m) {
// do stuff
}
// in another function
cv::Mat m(10, 10, CV_32FC3);
my_func(m);
我有 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 ¶m) {
// do stuff
}
// in another function
cv::Mat m(10, 10, CV_32FC3);
my_func(m);