OPENCV 3:如何将CV :: MAT作为可选参数传递

OpenCV 3: How to pass cv::Mat as an optional argument

本文关键字:参数传递 MAT CV OPENCV      更新时间:2023-10-16

我想在C 中编写一个函数,该函数将矩阵作为可选参数。如果用户在调用函数时最终传递了矩阵,则将通过函数修改,因此我正在通过参考实现通行证。

根据以前问题的接受答案,可以通过使默认值为空垫子来完成,例如:

void foo(..., cv::Mat &matrix = cv::Mat()) {
    // code
    return;
}

但是,当我尝试在OpenCV 3.2中进行编译时,我从类型的'cv :: mat&'从类型的'cv :: mat'»mat'»error。/p>

自OpenCV 2.4以来,此功能是否更改了,或者问题可能在其他地方?

我可能错了,因为我是这些问题的初学者,但这就是我的想法。您想通过参考文献进行一个可选的论点。问题是带有符号&的参考。是对l值的引用,该对象是存在的对象。C 不允许您编写的内容,因为matrix是R值,这是一个临时对象,与与之关联的实际存储地址没有实际的内存地址。您可以通过cv::Mat &matrix = cv::Mat()的唯一方法是构造它,const cv::Mat &matrix = cv::Mat()当然不是您需要的。

最简单的解决方案恕我直言只是超载您的函数定义,以便您拥有

void foo(...args); void foo(...args, cv::Mat &matrix);

希望它有帮助

这是因为C 不允许您使用rvalue初始化非const参考。

所以您可以:

1(使参考const-不适合您,因为您想更改函数中的矩阵

中的矩阵内容

2(在您的模块中全球存储一个cv::Mat INIT变量:

static const cv::Mat g_mat = cv::Mat();
void foo(..., cv::Mat &matrix = g_mat) {