从OpenCV方法返回多个Mat
在其文档中的openCV代码sapmles中,我看到它们只是将垫子作为参考传递并填充。从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是如何定义的,您将看到它们中有一个&,使它
但我的代码中有一个问题。当我调用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,其中一个应该可以工作我没有时间测试它