📄 cvmat.hpp.svn-base
字号:
/* mmul = (mat1^t) * mat_scaled1 */inline _CvMAT_MUL_ operator * ( const _CvMAT_T_& a, const _CvMAT_SCALE_& b ){ return _CvMAT_MUL_( &a.a, b.a, a.alpha*b.alpha, 1 ); }/* mmul = mat_scaled1 * (mat2^t) */inline _CvMAT_MUL_ operator * ( const _CvMAT_SCALE_& b, const _CvMAT_T_& a ){ return _CvMAT_MUL_( b.a, &a.a, a.alpha*b.alpha, 2 ); }/* mmul = mat_scaled1 * mat_scaled2 */inline _CvMAT_MUL_ operator * ( const _CvMAT_SCALE_& a, const _CvMAT_SCALE_& b ){ return _CvMAT_MUL_( a.a, b.a, a.alpha*b.alpha, 0 ); }/* mmul2 = mmul1 * scalar */inline _CvMAT_MUL_ operator * ( const _CvMAT_MUL_& a, double alpha ){ return _CvMAT_MUL_( a.a, a.b, a.alpha*alpha, a.t_ab ); }/* mmul2 = scalar * mmul1 */inline _CvMAT_MUL_ operator * ( double alpha, const _CvMAT_MUL_& a ){ return _CvMAT_MUL_( a.a, a.b, a.alpha*alpha, a.t_ab ); }/* -mmul */inline _CvMAT_MUL_ operator - ( const _CvMAT_MUL_& a ){ return _CvMAT_MUL_( a.a, a.b, -a.alpha, a.t_ab ); }/* mmuladd = mmul + mat */inline _CvMAT_MUL_ADD_ operator + ( const _CvMAT_MUL_& a, const CvMAT& b ){ return _CvMAT_MUL_ADD_( a.a, a.b, a.alpha, &b, 1, a.t_ab ); }/* !!! Comment this off because of ambigous conversion error !!! mmuladd = mat + mmul *//* inline _CvMAT_MUL_ADD_ operator + ( const CvMAT& b, const _CvMAT_MUL_& a ){ return _CvMAT_MUL_ADD_( a.a, a.b, a.alpha, &b, 1, a.t_ab ); }*//* mmuladd = mmul - mat */inline _CvMAT_MUL_ADD_ operator - ( const _CvMAT_MUL_& a, const CvMAT& b ){ return _CvMAT_MUL_ADD_( a.a, a.b, a.alpha, &b, -1, a.t_ab ); }/* !!! Comment this off because of ambigous conversion error !!! mmuladd = mat - mmul *//*inline _CvMAT_MUL_ADD_ operator - ( const CvMAT& b, const _CvMAT_MUL_& a ){ return _CvMAT_MUL_ADD_( a.a, a.b, -a.alpha, &b, 1, a.t_ab ); }*//* mmuladd = mmul + mat_scaled */inline _CvMAT_MUL_ADD_ operator + ( const _CvMAT_MUL_& a, const _CvMAT_SCALE_& b ){ return _CvMAT_MUL_ADD_( a.a, a.b, a.alpha, b.a, b.alpha, a.t_ab ); }/* mmuladd = mat_scaled + mmul */inline _CvMAT_MUL_ADD_ operator + ( const _CvMAT_SCALE_& b, const _CvMAT_MUL_& a ){ return _CvMAT_MUL_ADD_( a.a, a.b, a.alpha, b.a, b.alpha, a.t_ab ); }/* mmuladd = mmul - mat_scaled */inline _CvMAT_MUL_ADD_ operator - ( const _CvMAT_MUL_& a, const _CvMAT_SCALE_& b ){ return _CvMAT_MUL_ADD_( a.a, a.b, a.alpha, b.a, -b.alpha, a.t_ab ); }/* mmuladd = mat_scaled - mmul */inline _CvMAT_MUL_ADD_ operator - ( const _CvMAT_SCALE_& b, const _CvMAT_MUL_& a ){ return _CvMAT_MUL_ADD_( a.a, a.b, -a.alpha, b.a, b.alpha, a.t_ab ); }/* mmuladd = mmul + (mat^t) */inline _CvMAT_MUL_ADD_ operator + ( const _CvMAT_MUL_& a, const _CvMAT_T_& b ){ return _CvMAT_MUL_ADD_( a.a, a.b, a.alpha, &b.a, b.alpha, a.t_ab + 4 ); }/* mmuladd = (mat^t) + mmul */inline _CvMAT_MUL_ADD_ operator + ( const _CvMAT_T_& b, const _CvMAT_MUL_& a ){ return _CvMAT_MUL_ADD_( a.a, a.b, a.alpha, &b.a, b.alpha, a.t_ab + 4 ); }/* mmuladd = mmul - (mat^t) */inline _CvMAT_MUL_ADD_ operator - ( const _CvMAT_MUL_& a, const _CvMAT_T_& b ){ return _CvMAT_MUL_ADD_( a.a, a.b, a.alpha, &b.a, -b.alpha, a.t_ab + 4 ); }/* mmuladd = (mat^t) - mmul */inline _CvMAT_MUL_ADD_ operator - ( const _CvMAT_T_& b, const _CvMAT_MUL_& a ){ return _CvMAT_MUL_ADD_( a.a, a.b, -a.alpha, &b.a, b.alpha, a.t_ab + 4 ); }/* mmuladd = mat_scaled_shited * mat */inline _CvMAT_MUL_ADD_ operator * ( const _CvMAT_SCALE_SHIFT_& a, const CvMAT& b ){ return _CvMAT_MUL_ADD_( a.a, &b, a.alpha, &b, a.beta, 0 ); }/* mmuladd = mat * mat_scaled_shited */inline _CvMAT_MUL_ADD_ operator * ( const CvMAT& b, const _CvMAT_SCALE_SHIFT_& a ){ return _CvMAT_MUL_ADD_( &b, a.a, a.alpha, &b, a.beta, 0 ); }/* mmuladd = mat_scaled_shited * mat_scaled */inline _CvMAT_MUL_ADD_ operator * ( const _CvMAT_SCALE_SHIFT_& a, const _CvMAT_SCALE_& b ){ return _CvMAT_MUL_ADD_( a.a, b.a, a.alpha*b.alpha, b.a, a.beta*b.alpha, 0 ); }/* mmuladd = mat_scaled * mat_scaled_shited */inline _CvMAT_MUL_ADD_ operator * ( const _CvMAT_SCALE_& b, const _CvMAT_SCALE_SHIFT_& a ){ return _CvMAT_MUL_ADD_( b.a, a.a, a.alpha*b.alpha, b.a, a.beta*b.alpha, 0 ); }/* mmuladd = mat_scaled_shited * (mat^t) */inline _CvMAT_MUL_ADD_ operator * ( const _CvMAT_SCALE_SHIFT_& a, const _CvMAT_T_& b ){ return _CvMAT_MUL_ADD_( a.a, &b.a, a.alpha*b.alpha, &b.a, a.beta*b.alpha, 6 ); }/* mmuladd = (mat^t) * mat_scaled_shited */inline _CvMAT_MUL_ADD_ operator * ( const _CvMAT_T_& b, const _CvMAT_SCALE_SHIFT_& a ){ return _CvMAT_MUL_ADD_( &b.a, a.a, a.alpha*b.alpha, &b.a, a.beta*b.alpha, 5 ); }/* mmuladd2 = mmuladd1 * scalar */inline _CvMAT_MUL_ADD_ operator * ( const _CvMAT_MUL_ADD_& a, double alpha ){ return _CvMAT_MUL_ADD_( a.a, a.b, a.alpha*alpha, a.c, a.beta*alpha, a.t_abc ); }/* mmuladd2 = scalar * mmuladd1 */inline _CvMAT_MUL_ADD_ operator * ( double alpha, const _CvMAT_MUL_ADD_& a ){ return _CvMAT_MUL_ADD_( a.a, a.b, a.alpha*alpha, a.c, a.beta*alpha, a.t_abc ); }/* -mmuladd */inline _CvMAT_MUL_ADD_ operator - ( const _CvMAT_MUL_ADD_& a ){ return _CvMAT_MUL_ADD_( a.a, a.b, -a.alpha, a.c, -a.beta, a.t_abc ); }/* inv(a)*b, i.e. solve a*x = b */inline _CvMAT_SOLVE_ operator * ( const _CvMAT_INV_& a, const CvMAT& b ){ return _CvMAT_SOLVE_( &a.a, &b, a.method ); }/** PART III. Logical operations*/inline _CvMAT_NOT_ operator ~ ( const CvMAT& a ){ return _CvMAT_NOT_(&a); }inline _CvMAT_LOGIC_ operator & ( const CvMAT& a, const CvMAT& b ){ return _CvMAT_LOGIC_( &a, &b, _CvMAT_LOGIC_::AND, 0 ); }inline _CvMAT_LOGIC_ operator & ( const _CvMAT_NOT_& a, const CvMAT& b ){ return _CvMAT_LOGIC_( a.a, &b, _CvMAT_LOGIC_::AND, 1 ); }inline _CvMAT_LOGIC_ operator & ( const CvMAT& a, const _CvMAT_NOT_& b ){ return _CvMAT_LOGIC_( &a, b.a, _CvMAT_LOGIC_::AND, 2 ); }inline _CvMAT_LOGIC_ operator & ( const _CvMAT_NOT_& a, const _CvMAT_NOT_& b ){ return _CvMAT_LOGIC_( a.a, b.a, _CvMAT_LOGIC_::AND, 3 ); }inline _CvMAT_LOGIC_ operator | ( const CvMAT& a, const CvMAT& b ){ return _CvMAT_LOGIC_( &a, &b, _CvMAT_LOGIC_::OR, 0 ); }inline _CvMAT_LOGIC_ operator | ( const _CvMAT_NOT_& a, const CvMAT& b ){ return _CvMAT_LOGIC_( a.a, &b, _CvMAT_LOGIC_::OR, 1 ); }inline _CvMAT_LOGIC_ operator | ( const CvMAT& a, const _CvMAT_NOT_& b ){ return _CvMAT_LOGIC_( &a, b.a, _CvMAT_LOGIC_::OR, 2 ); }inline _CvMAT_LOGIC_ operator | ( const _CvMAT_NOT_& a, const _CvMAT_NOT_& b ){ return _CvMAT_LOGIC_( a.a, b.a, _CvMAT_LOGIC_::OR, 3 ); }inline _CvMAT_LOGIC_ operator ^ ( const CvMAT& a, const CvMAT& b ){ return _CvMAT_LOGIC_( &a, &b, _CvMAT_LOGIC_::XOR, 0 ); }inline _CvMAT_LOGIC_ operator ^ ( const _CvMAT_NOT_& a, const CvMAT& b ){ return _CvMAT_LOGIC_( a.a, &b, _CvMAT_LOGIC_::XOR, 1 ); }inline _CvMAT_LOGIC_ operator ^ ( const CvMAT& a, const _CvMAT_NOT_& b ){ return _CvMAT_LOGIC_( &a, b.a, _CvMAT_LOGIC_::XOR, 2 ); }inline _CvMAT_LOGIC_ operator ^ ( const _CvMAT_NOT_& a, const _CvMAT_NOT_& b ){ return _CvMAT_LOGIC_( a.a, b.a, _CvMAT_LOGIC_::XOR, 3 ); }inline _CvMAT_UN_LOGIC_ operator & ( const CvMAT& a, double alpha ){ return _CvMAT_UN_LOGIC_( &a, alpha, _CvMAT_LOGIC_::AND, 0 ); }inline _CvMAT_UN_LOGIC_ operator & ( double alpha, const CvMAT& a ){ return _CvMAT_UN_LOGIC_( &a, alpha, _CvMAT_LOGIC_::AND, 0 ); }inline _CvMAT_UN_LOGIC_ operator & ( const _CvMAT_NOT_& a, double alpha ){ return _CvMAT_UN_LOGIC_( a.a, alpha, _CvMAT_LOGIC_::AND, 1 ); }inline _CvMAT_UN_LOGIC_ operator & ( double alpha, const _CvMAT_NOT_& a ){ return _CvMAT_UN_LOGIC_( a.a, alpha, _CvMAT_LOGIC_::AND, 1 ); }inline _CvMAT_UN_LOGIC_ operator | ( const CvMAT& a, double alpha ){ return _CvMAT_UN_LOGIC_( &a, alpha, _CvMAT_LOGIC_::OR, 0 ); }inline _CvMAT_UN_LOGIC_ operator | ( double alpha, const CvMAT& a ){ return _CvMAT_UN_LOGIC_( &a, alpha, _CvMAT_LOGIC_::OR, 0 ); }inline _CvMAT_UN_LOGIC_ operator | ( const _CvMAT_NOT_& a, double alpha ){ return _CvMAT_UN_LOGIC_( a.a, alpha, _CvMAT_LOGIC_::OR, 1 ); }inline _CvMAT_UN_LOGIC_ operator | ( double alpha, const _CvMAT_NOT_& a ){ return _CvMAT_UN_LOGIC_( a.a, alpha, _CvMAT_LOGIC_::OR, 1 ); }inline _CvMAT_UN_LOGIC_ operator ^ ( const CvMAT& a, double alpha ){ return _CvMAT_UN_LOGIC_( &a, alpha, _CvMAT_LOGIC_::XOR, 0 ); }inline _CvMAT_UN_LOGIC_ operator ^ ( double alpha, const CvMAT& a ){ return _CvMAT_UN_LOGIC_( &a, alpha, _CvMAT_LOGIC_::XOR, 0 ); }inline _CvMAT_UN_LOGIC_ operator ^ ( const _CvMAT_NOT_& a, double alpha ){ return _CvMAT_UN_LOGIC_( a.a, alpha, _CvMAT_LOGIC_::XOR, 1 ); }inline _CvMAT_UN_LOGIC_ operator ^ ( double alpha, const _CvMAT_NOT_& a ){ return _CvMAT_UN_LOGIC_( a.a, alpha, _CvMAT_LOGIC_::XOR, 1 ); }/** PART IV. Comparison operations*/inline _CvMAT_CMP_ operator > ( const CvMAT& a, const CvMAT& b ){ return _CvMAT_CMP_( &a, &b, CV_CMP_GT ); }inline _CvMAT_CMP_ operator >= ( const CvMAT& a, const CvMAT& b ){ return _CvMAT_CMP_( &a, &b, CV_CMP_GE ); }inline _CvMAT_CMP_ operator < ( const CvMAT& a, const CvMAT& b ){ return _CvMAT_CMP_( &a, &b, CV_CMP_LT ); }inline _CvMAT_CMP_ operator <= ( const CvMAT& a, const CvMAT& b ){ return _CvMAT_CMP_( &a, &b, CV_CMP_LE ); }inline _CvMAT_CMP_ operator == ( const CvMAT& a, const CvMAT& b ){ return _CvMAT_CMP_( &a, &b, CV_CMP_EQ ); }inline _CvMAT_CMP_ operator != ( const CvMAT& a, const CvMAT& b ){ return _CvMAT_CMP_( &a, &b, CV_CMP_NE ); }inline _CvMAT_CMP_ operator > ( const CvMAT& a, double alpha ){ return _CvMAT_CMP_( &a, alpha, CV_CMP_GT ); }inline _CvMAT_CMP_ operator > ( double alpha, const CvMAT& a ){ return _CvMAT_CMP_( &a, alpha, CV_CMP_LT ); }inline _CvMAT_CMP_ operator >= ( const CvMAT& a, double alpha ){ return _CvMAT_CMP_( &a, alpha, CV_CMP_GE ); }inline _CvMAT_CMP_ operator >= ( double alpha, const CvMAT& a ){ return _CvMAT_CMP_( &a, alpha, CV_CMP_LE ); }inline _CvMAT_CMP_ operator < ( const CvMAT& a, double alpha ){ return _CvMAT_CMP_( &a, alpha, CV_CMP_LT ); }inline _CvMAT_CMP_ operator < ( double alpha, const CvMAT& a ){ return _CvMAT_CMP_( &a, alpha, CV_CMP_GT ); }inline _CvMAT_CMP_ operator <= ( const CvMAT& a, double alpha ){ return _CvMAT_CMP_( &a, alpha, CV_CMP_LE ); }inline _CvMAT_CMP_ operator <= ( double alpha, const CvMAT& a ){ return _CvMAT_CMP_( &a, alpha, CV_CMP_GE ); }inline _CvMAT_CMP_ operator == ( const CvMAT& a, double alpha ){ return _CvMAT_CMP_( &a, alpha, CV_CMP_EQ ); }inline _CvMAT_CMP_ operator == ( double alpha, const CvMAT& a ){ return _CvMAT_CMP_( &a, alpha, CV_CMP_EQ ); }inline _CvMAT_CMP_ operator != ( const CvMAT& a, double alpha ){ return _CvMAT_CMP_( &a, alpha, CV_CMP_NE ); }inline _CvMAT_CMP_ operator != ( double alpha, const CvMAT& a ){ return _CvMAT_CMP_( &a, alpha, CV_CMP_NE ); }/** PART V. Speedup for some augmented assignments to CvMAT*/inline CvMAT& CvMAT::operator += ( const _CvMAT_SCALE_& scale_mat ){ return (*this = *this + scale_mat); }inline CvMAT& CvMAT::operator += ( const _CvMAT_SCALE_SHIFT_& scale_mat ){ return (*this = *this + scale_mat); }inline CvMAT& CvMAT::operator += ( const _CvMAT_MUL_& mmul ){ return (*this = mmul + *this); }inline CvMAT& CvMAT::operator -= ( const _CvMAT_SCALE_& scale_mat ){ return (*this = *this - scale_mat); }inline CvMAT& CvMAT::operator -= ( const _CvMAT_SCALE_SHIFT_& scale_mat ){ return (*this = *this - scale_mat); }inline CvMAT& CvMAT::operator -= ( const _CvMAT_MUL_& mmul ){ return (*this = -mmul + *this); }inline CvMAT& CvMAT::operator *= ( const _CvMAT_SCALE_& scale_mat ){ return (*this = *this * scale_mat); }inline CvMAT& CvMAT::operator *= ( const _CvMAT_SCALE_SHIFT_& scale_mat ){ return (*this = *this * scale_mat); }/****************************************************************************************\* misc. operations on temporary matrices (+,-,*) *\****************************************************************************************//** the base proxy class implementation*//* a.*b */inline _CvMAT_DOT_OP_ _CvMAT_BASE_OP_::mul( const CvMAT& a ) const{ return ((CvMAT)*this).mul(a); }/* a.*b*alpha */inline _CvMAT_DOT_OP_ _CvMAT_BASE_OP_::mul( const _CvMAT_SCALE_& a ) const{ return ((CvMAT)*this).mul(a); }/* a./b */inline _CvMAT_DOT_OP_ _CvMAT_BASE_OP_::div( const CvMAT& a ) const{ return ((CvMAT)*this).div(a); }/* a./(b*alpha) */inline _CvMAT_DOT_OP_ _CvMAT_BASE_OP_::div( const _CvMAT_SCALE_& a ) const{ return ((CvMAT)*this).div(a); }/* a.max(b) */inline _CvMAT_DOT_OP_ _CvMAT_BASE_OP_::min( const CvMAT& a ) const{ return ((CvMAT)*this).min(a); }/* a.min(b) */inline _CvMAT_DOT_OP_ _CvMAT_BASE_OP_::max( const CvMAT& a ) const{ return ((CvMAT)*this).max(a); }/* a.max(alpha) */inline _CvMAT_DOT_OP_ _CvMAT_BASE_OP_::min( double alpha ) const{ return ((CvMAT)*this).min(alpha); }/* a.min(alpha) */inline _CvMAT_DOT_OP_ _CvMAT_BASE_OP_::max( double alpha ) const{ return ((CvMAT)*this).max(alpha); }inline _CvMAT_INV_ _CvMAT_BASE_OP_::inv( int method ) const{ return ((CvMAT)*this).inv(method); }inline _CvMAT_T_ _CvMAT_BASE_OP_::t() const{ return ((CvMAT)*this).t(); }inline _CvMAT_CVT_ _CvMAT_BASE_OP_::cvt( int newdepth, double scale, double shift ) const{ return ((CvMAT)*this).cvt( newdepth, scale, shift ); }inline CvMAT _CvMAT_BASE_OP_::row( int r ) const{ return CvMAT((CvMAT)*this, 0, r ); }inline CvMAT _CvMAT_BASE_OP_::rowrange( int row1, int row2 ) const{ CvMAT m = (CvMAT)*this; assert( 0 <= row1 && row1 < row2 && row2 <= m.height ); return CvMAT( m, cvRect( 0, row1, m.width, row2 - row1 ));}inline CvMAT _CvMAT_BASE_OP_::col( int c ) const{ return CvMAT( (CvMAT)*this, 1, c ); }inline CvMAT _CvMAT_BASE_OP_::colrange( int col1, int col2 ) const{ CvMAT m = (CvMAT)*this; assert( 0 <= col1 && col1 < col2 && col2 <= m.width ); return CvMAT( m, cvRect( col1, 0, col2 - col1, m.height ));}inline CvMAT _CvMAT_BASE_OP_::rect( CvRect r ) const{ return CvMAT( (CvMAT)*this, r ); }inline CvMAT _CvMAT_BASE_OP_::diag( int d ) const{ return CvMAT( (CvMAT)*this, -1, d ); }inline double _CvMAT_BASE_OP_::det() const{ return ((CvMAT)*this).det(); }inline double _CvMAT_BASE_OP_::norm( int norm_type ) const{ return ((CvMAT)*this).norm( norm_type ); }inline CvScalar _CvMAT_BASE_OP_::sum() const{ return ((CvMAT)*this).sum(); }inline double _CvMAT_BASE_OP_::min( CvPoint* minloc ) const{ return ((CvMAT)*this).min( minloc ); }inline double _CvMAT_BASE_OP_::max( CvPoint* maxloc ) const{ return ((CvMAT)*this).max( maxloc ); }/****************************************************************************************//* proxy classes implementation. *//* part I. constructors *//****************************************************************************************//* constructors */inline _CvMAT_COPY_::_CvMAT_COPY_( const CvMAT* _a ) : a((CvMAT*)_a) {}inline _CvMAT_CVT_::_CvMAT_CVT_( const CvMAT* _a, int _newdepth, double _scale, double _shift ) : a(*(CvMAT*)_a), newdepth(_newdepth), scale(_scale), shift(_shift) {}inline _CvMAT_T_::_CvMAT_T_( const CvMAT* _a ) : a(*(CvMAT*)_a), alpha(1) {}inline _CvMAT_T_::_CvMAT_T_( const CvMAT* _a, double _alpha ) : a(*(CvMAT*)_a), alpha(_alpha) {}inline _CvMAT_INV_::_CvMAT_INV_( const CvMAT* _a, int _method ) : a(*(CvMAT*)_a), method(_method) {}inline _CvMAT_MUL_::_CvMAT_MUL_( const CvMAT* _a, const CvMAT* _b, int _t_ab ) : a((CvMAT*)_a), b((CvMAT*)_b), alpha(1), t_ab(_t_ab) {}inline _CvMAT_MUL_::_CvMAT_MUL_( const CvMAT* _a, const CvMAT* _b, double _alpha, int _t_ab ) : a((CvMAT*)_a), b((CvMAT*)_b), alpha(_alpha), t_ab(_t_ab) {}inline _CvMAT_MUL_ADD_::_CvMAT_MUL_ADD_( const CvMAT* _a, const CvMAT* _b, const CvMAT* _c, int _t_abc ) : a((CvMAT*)_a), b((CvMAT*)_b), c((CvMAT*)_c), t_abc(_t_abc) {}inline _CvMAT_MUL_ADD_::_CvMAT_MUL_ADD_( const CvMAT* _a, const CvMAT* _b, double _alpha, const CvMAT* _c, double _beta, int _t_abc ) : a((CvMAT*)_a), b((CvMAT*)_b), alpha(_alpha), c((CvMAT*)_c), beta(_beta), t_abc(_t_abc) {}inline _CvMAT_ADD_::_CvMAT_ADD_( const CvMAT* _a, const CvMAT* _b, double _beta ) : a((CvMAT*)_a), b((CvMAT*)_b), beta(_beta) {}inline _CvMAT_ADD_EX_::_CvMAT_ADD_EX_( const CvMAT* _a, double _alpha, const CvMAT* _b, double _beta, double _gamma ) : a((CvMAT*)_a), alpha(_alpha), b((CvMAT*)_b), beta(_beta), gamma(_gamma) {}inline _CvMAT_SCALE_::_CvMAT_SCALE_( const
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -