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 )
我希望它会更好,因为它会消除额外的不必要的复制操作。
答案 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变量作为输入/输出数组(你不必自己包装它们)。