(OpenCV)笔记汇总

本文地址http://blog.csdn.net/mounty_fsc/article/details/51085201

1. 关于InputArray的代理类

在OpenCV经常有InputArray作为函数形参的使用,而实参往往是Mat,vector等,乍一看以为是Mat类实现了抽象类或者接口InputArray,分析源码之后,可以得知InputArray(_InputArray)、OutputArray(_OutputArray)与Mat、Vector、Scalar等的关系。

class CV_EXPORTS _InputArray
{
public:
...
    _InputArray(const Mat& m);
    _InputArray(const MatExpr& expr);
    template<typename _Tp> _InputArray(const _Tp* vec, int n);
    template<typename _Tp> _InputArray(const vector<_Tp>& vec);
    template<typename _Tp> _InputArray(const vector<vector<_Tp> >& vec);
    _InputArray(const vector<Mat>& vec);
    template<typename _Tp> _InputArray(const vector<Mat_<_Tp> >& vec);
    template<typename _Tp> _InputArray(const Mat_<_Tp>& m);
    template<typename _Tp, int m, int n> _InputArray(const Matx<_Tp, m, n>& matx);
    _InputArray(const Scalar& s);
    _InputArray(const double& val);
 ...

    int flags;
    void* obj;
    Size sz;
};

例如函数调用:

MatI, padded;
copyMakeBorder(I,padded, …);
//其函数声明:
voidcopyMakeBorder( InputArray src, OutputArray dst,…..);

其中代理类中有成员变量void* obj;通过不同的构造方法给obj赋值
作用有:
1. 把不相关的类(比如说用户自定义的类和系统类)实现了类似多态的效果
2. 函数声明,一眼可以看出哪些是输入,哪些是输出
3. 方便动态内存管理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值