【问题标题】:Why so many functions in OPENCV use InputArray and OutputArray as function arguments?为什么 OPENCV 中有这么多函数使用 InputArray 和 OutputArray 作为函数参数?
【发布时间】:2016-05-18 11:10:52
【问题描述】:

OPENCV 中的许多函数都使用 InputArray 和 OutputArray 作为函数参数。比如OPENCV中的霍夫变换函数:

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 )

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

【问题讨论】:

标签: c++ opencv


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-17
    • 1970-01-01
    • 2013-01-17
    • 1970-01-01
    • 2017-10-05
    • 2020-05-18
    相关资源
    最近更新 更多