为什么OPENCV中的这么多函数使用InputArray和OutputArray作为函数参数?

时间:2016-05-18 11:10:53

标签: c++ opencv

OPENCV中的许多函数都使用InputArray和OutputArray作为函数参数。例如,OPENCV中的Hough变换函数:

void HoughLines(InputArray image, OutputArray lines, double rho, double theta, int threshold, double srn=0, double stn=0 )

在函数内部,我们必须使用InputArray函数getMat将其赋予真正的输入数组类型。例如,Mat image= _image.getMat()。同样,我们必须使用copyTo函数将真正的输出数组转换为OutputArray格式。例如,Mat(lines).copyTo(_lines)

我的问题是OPENCV以这种方式设计其功能签名的原因。以霍夫函数为例,如果我们使用以下函数签名:

void HoughLines(Mat &image, std::vector<Vec2f> &lines, double rho, double theta, int threshold, double srn=0, double stn=0 )

我希望它会更好,因为它会消除额外的不必要的复制操作。

1 个答案:

答案 0 :(得分:6)

从(http://docs.opencv.org/2.4/modules/core/doc/basic_structures.html?highlight=inputarray#InputArray

  

当您在参考手册或OpenCV源代码中看到一个采用InputArray的函数时,它意味着您可以实际传递Mat,Matx,向量等。(参见完整列表上方)。

cv Arrays只是代理类。你可以使用cv :: Mat变量作为输入/输出数组(你不必自己包装它们)。