从OpenCV方法返回多个Mat

从OpenCV方法返回多个Mat,opencv,mat,Opencv,Mat,在其文档中的openCV代码sapmles中,我看到它们只是将垫子作为参考传递并填充。但我的代码中有一个问题。当我调用TestMethod时,它不会填充它们 void TestMethod(Mat a, Mat b) { a = imread("img1.jpg"); b = imread("img2.jpg"); return; } 您可能会对OpenCV如何使用typedef隐藏引用类型感到困惑。我将查找像InputArray这样的typedef是如何定义的,您将看到它们中有一个&,使它

在其文档中的openCV代码sapmles中,我看到它们只是将垫子作为参考传递并填充。
但我的代码中有一个问题。当我调用TestMethod时,它不会填充它们

void TestMethod(Mat a, Mat b)
{
a = imread("img1.jpg");
b = imread("img2.jpg");

return;
}

您可能会对OpenCV如何使用typedef隐藏引用类型感到困惑。我将查找像
InputArray
这样的typedef是如何定义的,您将看到它们中有一个
&
,使它们引用类型
cv::Mat
不是typedef,因此需要在函数的参数列表中将其声明为引用

void TestMethod(Mat& a, Mat& b)
{
    a = imread("img1.jpg");
    b = imread("img2.jpg");

    return;
}

按照现在编写的方式,a和b是调用函数时传递的Mat变量的副本。当函数返回时,您只是覆盖正在解除分配的副本。

您可能会被OpenCV如何使用typedefs隐藏引用类型弄糊涂。我将查找像
InputArray
这样的typedef是如何定义的,您将看到它们中有一个
&
,使它们引用类型
cv::Mat
不是typedef,因此需要在函数的参数列表中将其声明为引用

void TestMethod(Mat& a, Mat& b)
{
    a = imread("img1.jpg");
    b = imread("img2.jpg");

    return;
}

按照现在编写的方式,a和b是调用函数时传递的Mat变量的副本。当函数返回时,您正在覆盖正在释放的副本。

尝试使用Mat&a、Mat&b或使用Mat*a、Mat*b,其中一个应该可以工作我没有时间测试它尝试使用Mat&a、Mat&b或使用Mat*a、Mat*b,其中一个应该可以工作我没有时间测试它