例如,在文档中有:
void cv::absdiff ( InputArray src1,
InputArray src2,
OutputArray dst
)
Run Code Online (Sandbox Code Playgroud)
这是一样的:
void cv::absdiff ( Mat src1,
Mat src2,
Mat dst
)
Run Code Online (Sandbox Code Playgroud)
要么:
void cv::absdiff ( Mat* src1,
Mat* src2,
Mat* dst
)
Run Code Online (Sandbox Code Playgroud)
?
我需要这个来创建新的功能,例如
void absDiffSay(XXX src1, XXX src2, XXX dst)
{
cv::absdiff(src1,src2,dst);
cout<<"absdiff"<<endl;
}
Run Code Online (Sandbox Code Playgroud)
Mik*_*iki 23
这是用于将只读输入数组传递到OpenCV函数的代理类.它被定义为:
typedef const _InputArray& InputArray;
Run Code Online (Sandbox Code Playgroud)
其中_InputArray是可以从构成一类Mat,Mat_<T>,Matx<T, m, n>,std::vector<T>,std::vector<std::vector<T> >或std::vector<Mat>.它也可以用矩阵表达式构造.
由于这主要是实现级别的类,并且其接口在将来的版本中可能会更改,因此我们不会详细描述它.但是,有一些关键的事情应该牢记在心:
当你在参考手册中或在OpenCV中的源代码,需要一个函数看到InputArray,这意味着你可以实际传递Mat,Matx,vector<T>等(参见完整列表上文).
可选的输入参数:如果某些输入数组可能为空,则传递cv::noArray()(或者cv::Mat()就像之前可能做的那样).该类仅用于传递参数.也就是说,通常您不应声明此类型的类成员,本地和全局变量.如果要设计自己的函数或可以操作多种类型数组的类方法,可以使用InputArray(或OutputArray)各自的参数.在函数内部,您应该使用_InputArray::getMat()方法为数组构造矩阵标头(不复制数据)._InputArray::kind()可用于区分Mat从vector<>等,但通常是不需要的.
因此,如果您需要,您的功能可以接受cv::Mat并std::vector<>使用InputArray,否则使用简单cv::Mat.
当然,不要使用Mat*.