OpenCV 3:如何将cv :: Mat作为可选参数传递

hfs*_*hfs 3 c++ opencv matrix

我想用C ++编写一个将矩阵作为可选参数的函数。如果用户最终在调用函数时传递矩阵,则该矩阵将被函数修改,因此我正在实现按引用传递。

根据先前问题的公认答案,可以通过将默认值设置为空Mat来完成,例如:

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

    return;
}
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试在OpenCV 3.2中进行编译时,从类型为'cv :: Mat'的右值中得到«无效的初始化类型'cv :: Mat&'的非常量引用»错误。

自OpenCV 2.4起,此功能是否已更改,或者问题可能出在其他地方?

小智 5

我可能是错的,因为我是这些问题的初学者,但这就是我的想法。您要通过ref传递一个可选参数。问题是带有符号&的引用是对l值的引用,而l值是存在的对象。C ++不允许您编写内容,因为它matrix是一个r值,即一个临时对象,没有关联的实际内存地址。您唯一可以通过的方法cv::Mat &matrix = cv::Mat()是通过构造它,const cv::Mat &matrix = cv::Mat()这当然不是您所需要的。

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

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

希望能帮助到你

  • 是的,这就是这样做的方式。也考虑提供实现。应该是这样的:`{cv :: Mat dummy; foo(...,dummy); }`。还要使用4个空格的缩进格式设置代码格式。 (2认同)