为啥 OPENCV 中有这么多函数使用 InputArray 和 OutputArray 作为函数参数?
Posted
技术标签:
【中文标题】为啥 OPENCV 中有这么多函数使用 InputArray 和 OutputArray 作为函数参数?【英文标题】: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 )
我希望这样做会更好,因为它可以消除额外的不必要的复制操作。
【问题讨论】:
相关:***.com/q/31820088/5008845 我希望这样做会更好,因为这样做可以消除额外的不必要的复制操作。实际上不涉及复制。 【参考方案1】:来自 (http://docs.opencv.org/2.4/modules/core/doc/basic_structures.html?highlight=inputarray#InputArray)
当您在参考手册或 OpenCV 源代码中看到一个接受 InputArray 的函数时,这意味着您实际上可以传递 Mat、Matx、向量等(参见上面的完整列表)。
cv 数组只是代理类。您可以使用 cv::Mat 变量作为输入/输出数组(您不必自己包装它们)。
【讨论】:
以上是关于为啥 OPENCV 中有这么多函数使用 InputArray 和 OutputArray 作为函数参数?的主要内容,如果未能解决你的问题,请参考以下文章
OpenCV这么简单为啥不学——2逐帧播放视频(VideoCapture函数waitKey函数0xFF == ord(‘1‘))