C++ 是";“输入阵列”;及;垫;在opencv中也一样吗?

C++ 是";“输入阵列”;及;垫;在opencv中也一样吗?,c++,opencv,C++,Opencv,例如,在文档中有: void cv::absdiff ( InputArray src1, InputArray src2, OutputArray dst ) 这与: void cv::absdiff ( Mat src1, Mat src2, Mat dst ) 或: ? 例如,我需要这个来创建新函数 vo

例如,在文档中有:

void cv::absdiff    (   InputArray      src1,
        InputArray      src2,
        OutputArray     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;
}
void absDiffSay(XXX src1、XXX src2、XXX dst)
{
cv::absdiff(src1、src2、dst);
不能

这是用于将只读输入数组传递到OpenCV函数的代理类。 其定义如下:

typedef const _InputArray& InputArray;
其中,
\u InputArray
是一个类,可以由
Mat
Matx
std::vector
std::vector
std::vector
构造。它也可以由矩阵表达式构造

由于这主要是实现级别的类,其接口在未来版本中可能会更改,因此我们不详细描述它。但是,有一些关键的事情需要记住:

当您在参考手册或OpenCV源代码中看到采用
InputArray
的函数时,这意味着您实际上可以传递
Mat
Matx
vector
等(请参阅上面的完整列表)

可选输入参数:如果某些输入数组可能为空,请传递
cv::noArray()
(或者像您以前可能做的那样简单地传递
cv::Mat()
)。 该类仅用于传递参数。也就是说,通常不应声明此类的类成员、局部和全局变量。 如果您想设计自己的函数或类方法来操作多种类型的数组,可以对相应的参数使用
InputArray
(或
OutputArray
).
\u InputArray::kind()
可用于区分
Mat
vector
等,但通常不需要

因此,如果您需要函数可以同时接受
cv::Mat
std::vector
请使用
InputArray
,否则只需使用
cv::Mat


当然,不要使用
Mat*

是的,使用const Mat&作为输入,避免复制Mats的头。您也可以将dst作为参数作为Mat&,并返回非常详细的答案。
typedef const _InputArray& InputArray;