例如,在文档中有:
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*
.
归档时间: |
|
查看次数: |
9034 次 |
最近记录: |