概述
InputArray和OutputArray两个类都是代理数据类型,用来接收Mat和Vector<>作为输入参数,OutputArray继承自InputArray。
InputArray作为输入参数的时候,传入的参数加了const限定符,即它只接收参数作为纯输入参数,无法更改输入参数的内容。而OutputArray则没有加入限定符,可以对参数的内容进行更改。
InputArray使用一系列的数据类型作为输入实例化自身,通过设定一系列的构造函数来实现。
_InputArray::_InputArray(constMat&m) : flags(MAT),obj((void*)&m) {}
_InputArray::_InputArray(constvector<Mat>&vec) : flags(STD_VECTOR_MAT),obj((void*)&vec) {}
_InputArray::_InputArray(constdouble&val) : flags(FIXED_TYPE +FIXED_SIZE + MATX +CV_64F), obj((void*)&val),sz(Size(1,1)) {}
.....
可以看到在构造的时候,同时指定了flags和obj,flags用于表明当前存储的数据类型,而obj存储的则是数据的内存地址。
除了这些基本的构造函数外,还有其他支持泛型的构造函数,如下
/// Input/Output Arrays /
template<typename_Tp>inline_InputArray::_InputArray(constvector<_Tp>&vec)
: flags(FIXED_TYPE +STD_VECTOR + DataType<_Tp>::type),obj((void*)&vec) {}
template<typename