在文档中,例如:
void cv::absdiff ( InputArray src1,
InputArray src2,
OutputArray dst
)
是否与:
相同void cv::absdiff ( Mat src1,
Mat src2,
Mat dst
)
或:
void cv::absdiff ( Mat* src1,
Mat* src2,
Mat* dst
)
我需要这个来创建新功能,例如
void absDiffSay(XXX src1, XXX src2, XXX dst)
{
cv::absdiff(src1,src2,dst);
cout<<"absdiff"<<endl;
}
答案 0 :(得分:22)
这是用于将只读输入数组传递到OpenCV函数的代理类。 它被定义为:
<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<Ist xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">
<Credit>
<LoanApp>
<Routing Transaction=\"LoanApp\">
<Processing>
<Process Type=\"Trans-type\">pass</Process>
</Processing>
<From>
<IDs>
<ID Type=\"Network\">WEBSITE</ID>
<ID Type=\"WEB\">WEBSITE</ID>
<ID Type=\"D\">4054563</ID>
</IDs>
其中typedef const _InputArray& InputArray;
是可以从_InputArray
,Mat
,Mat_<T>
,Matx<T, m, n>
,std::vector<T>
或{{1}构建的类}}。它也可以用矩阵表达式构建。
由于这主要是实现级别的类,并且其接口在将来的版本中可能会更改,因此我们不会详细描述它。但是,有一些关键的事情应该牢记在心:
当您在参考手册或OpenCV源代码中看到一个采用std::vector<std::vector<T> >
的函数时,这意味着您实际上可以通过std::vector<Mat>
,InputArray
,Mat
等。(见上面的完整清单)。
可选的输入参数:如果某些输入数组可能为空,请传递Matx
(或者只是vector<T>
,就像之前可能做的那样)。
该类仅用于传递参数。也就是说,通常您不应声明此类型的类成员,本地和全局变量。
如果要设计自己的函数或可以操作多种类型数组的类方法,可以使用cv::noArray()
(或cv::Mat()
)作为相应参数。在函数内部,您应该使用InputArray
方法为数组构造矩阵标头(不复制数据)。 OutputArray
可用于区分_InputArray::getMat()
与_InputArray::kind()
等,但通常不需要。
因此,如果您需要,您的功能可以接受Mat
和vector<>
使用cv::Mat
,否则只需使用std::vector<>
。
当然,不使用InputArray
。