43 #ifndef __OPENCV_CORE_MATRIX_OPERATIONS_HPP__
44 #define __OPENCV_CORE_MATRIX_OPERATIONS_HPP__
49 #endif // SKIP_INCLUDES
59 :
flags(0), dims(0), rows(0), cols(0), data(0), refcount(0),
60 datastart(0), dataend(0), datalimit(0), allocator(0), size(&rows)
64 inline Mat::Mat(
int _rows,
int _cols,
int _type)
65 :
flags(0), dims(0), rows(0), cols(0), data(0), refcount(0),
66 datastart(0), dataend(0), datalimit(0), allocator(0), size(&rows)
68 create(_rows, _cols, _type);
72 :
flags(0), dims(0), rows(0), cols(0), data(0), refcount(0),
73 datastart(0), dataend(0), datalimit(0), allocator(0), size(&rows)
75 create(_rows, _cols, _type);
80 :
flags(0), dims(0), rows(0), cols(0), data(0), refcount(0),
81 datastart(0), dataend(0), datalimit(0), allocator(0), size(&rows)
87 :
flags(0), dims(0), rows(0), cols(0), data(0), refcount(0),
88 datastart(0), dataend(0), datalimit(0), allocator(0), size(&rows)
94 inline Mat::Mat(
int _dims,
const int* _sz,
int _type)
95 :
flags(0), dims(0), rows(0), cols(0), data(0), refcount(0),
96 datastart(0), dataend(0), datalimit(0), allocator(0), size(&rows)
102 :
flags(0), dims(0), rows(0), cols(0), data(0), refcount(0),
103 datastart(0), dataend(0), datalimit(0), allocator(0), size(&rows)
105 create(_dims, _sz, _type);
110 :
flags(m.
flags), dims(m.dims), rows(m.rows), cols(m.cols), data(m.data),
111 refcount(m.refcount), datastart(m.datastart), dataend(m.dataend),
112 datalimit(m.datalimit), allocator(m.allocator), size(&rows)
127 inline Mat::Mat(
int _rows,
int _cols,
int _type,
void* _data,
size_t _step)
128 :
flags(MAGIC_VAL + (_type &
TYPE_MASK)), dims(2), rows(_rows), cols(_cols),
129 data((
uchar*)_data), refcount(0), datastart((
uchar*)_data), dataend(0),
130 datalimit(0), allocator(0), size(&rows)
140 if(
rows == 1 ) _step = minstep;
150 :
flags(MAGIC_VAL + (_type &
TYPE_MASK)), dims(2), rows(_sz.height), cols(_sz.width),
151 data((
uchar*)_data), refcount(0), datastart((
uchar*)_data), dataend(0),
152 datalimit(0), allocator(0), size(&rows)
162 if(
rows == 1 ) _step = minstep;
174 dims(2), rows(m->rows), cols(m->cols), data(m->data.ptr), refcount(0),
175 datastart(m->data.ptr), allocator(0), size(&rows)
193 template<
typename _Tp>
inline Mat::Mat(
const vector<_Tp>& vec,
bool copyData)
195 dims(2), rows((int)vec.size()), cols(1), data(0), refcount(0),
196 datastart(0), dataend(0), allocator(0), size(&rows)
213 dims(2), rows(n), cols(1), data(0), refcount(0),
214 datastart(0), dataend(0), allocator(0), size(&rows)
229 dims(2), rows(m), cols(n), data(0), refcount(0),
230 datastart(0), dataend(0), allocator(0), size(&rows)
235 step[1] =
sizeof(_Tp);
246 dims(2), rows(2), cols(1), data(0), refcount(0),
247 datastart(0), dataend(0), allocator(0), size(&rows)
258 ((_Tp*)
data)[0] = pt.
x;
259 ((_Tp*)
data)[1] = pt.
y;
266 dims(2), rows(3), cols(1), data(0), refcount(0),
267 datastart(0), dataend(0), allocator(0), size(&rows)
278 ((_Tp*)
data)[0] = pt.
x;
279 ((_Tp*)
data)[1] = pt.
y;
280 ((_Tp*)
data)[2] = pt.
z;
287 dims(0), rows(0), cols(0), data(0), refcount(0),
288 datastart(0), dataend(0), allocator(0), size(&rows)
290 *
this = *commaInitializer;
366 int sz[] = {_rows, _cols};
389 return Mat(*
this, rowRange, colRange);
393 {
return Mat(*
this, roi); }
397 return Mat(*
this, ranges);
403 CvMat m =
cvMat(rows, dims == 1 ? 1 : cols, type(), data);
404 m.
step = (int)step[0];
405 m.
type = (m.
type & ~CONTINUOUS_FLAG) | (
flags & CONTINUOUS_FLAG);
423 for(
int i = 0; i <
dims; i++ )
440 template<
typename _Tp>
inline _Tp*
Mat::ptr(
int y)
446 template<
typename _Tp>
inline const _Tp*
Mat::ptr(
int y)
const
456 (
unsigned)i0 < (
unsigned)
size.
p[0] &&
457 (
unsigned)i1 < (
unsigned)
size.
p[1] );
464 (
unsigned)i0 < (
unsigned)
size.
p[0] &&
465 (
unsigned)i1 < (
unsigned)
size.
p[1] );
472 (
unsigned)i0 < (
unsigned)
size.
p[0] &&
473 (
unsigned)i1 < (
unsigned)
size.
p[1] &&
474 (
unsigned)i2 < (
unsigned)
size.
p[2] );
481 (
unsigned)i0 < (
unsigned)
size.
p[0] &&
482 (
unsigned)i1 < (
unsigned)
size.
p[1] &&
483 (
unsigned)i2 < (
unsigned)
size.
p[2] );
492 for( i = 0; i < d; i++ )
495 p += idx[i]*
step.
p[i];
505 for( i = 0; i < d; i++ )
508 p += idx[i]*
step.
p[i];
513 template<
typename _Tp>
inline _Tp&
Mat::at(
int i0,
int i1)
518 return ((_Tp*)(
data +
step.
p[0]*i0))[i1];
521 template<
typename _Tp>
inline const _Tp&
Mat::at(
int i0,
int i1)
const
526 return ((
const _Tp*)(
data +
step.
p[0]*i0))[i1];
542 return ((
const _Tp*)(
data +
step.
p[0]*pt.
y))[pt.
x];
545 template<
typename _Tp>
inline _Tp&
Mat::at(
int i0)
548 (
unsigned)i0 < (
unsigned)(
size.
p[0] +
size.
p[1] - 1) &&
553 template<
typename _Tp>
inline const _Tp&
Mat::at(
int i0)
const
556 (
unsigned)i0 < (
unsigned)(
size.
p[0] +
size.
p[1] - 1) &&
561 template<
typename _Tp>
inline _Tp&
Mat::at(
int i0,
int i1,
int i2)
564 return *(_Tp*)
ptr(i0, i1, i2);
566 template<
typename _Tp>
inline const _Tp&
Mat::at(
int i0,
int i1,
int i2)
const
569 return *(
const _Tp*)
ptr(i0, i1, i2);
571 template<
typename _Tp>
inline _Tp&
Mat::at(
const int* idx)
574 return *(_Tp*)
ptr(idx);
576 template<
typename _Tp>
inline const _Tp&
Mat::at(
const int* idx)
const
579 return *(
const _Tp*)
ptr(idx);
612 template<
typename _Tp>
inline void Mat::copyTo(vector<_Tp>& v)
const
615 if(
empty() || n == 0 )
626 template<
typename _Tp>
inline Mat::operator vector<_Tp>()
const
633 template<
typename _Tp,
int n>
inline Mat::operator
Vec<_Tp, n>()
const
635 CV_Assert( data && dims <= 2 && (rows == 1 || cols == 1) &&
636 rows + cols - 1 == n && channels() == 1 );
641 convertTo(tmp, tmp.
type());
647 CV_Assert( data && dims <= 2 && rows == m && cols == n && channels() == 1 );
652 convertTo(tmp, tmp.
type());
664 *(_Tp*)(
data + (
size.
p[0]++)*step.p[0]) = elem;
680 return Size(p[1], p[0]);
684 inline Mat::MSize::operator
const int*()
const {
return p; }
688 int d = p[-1], dsz = sz.
p[-1];
692 return p[0] == sz.
p[0] && p[1] == sz.
p[1];
694 for(
int i = 0; i < d; i++ )
695 if( p[i] != sz.
p[i] )
702 return !(*
this == sz);
709 inline Mat::MStep::operator size_t()
const
721 static inline Mat cvarrToMatND(
const CvArr* arr,
bool copyData=
false,
int coiMode=0)
723 return cvarrToMat(arr, copyData,
true, coiMode);
736 template<
typename _Tp,
int m,
int n,
int nm>
inline void
737 SVD::compute(
const Matx<_Tp, m, n>& a,
Matx<_Tp, nm, 1>& w,
Matx<_Tp, m, nm>& u,
Matx<_Tp, n, nm>& vt )
739 assert( nm ==
MIN(m, n));
740 Mat _a(a,
false), _u(u,
false), _w(w,
false), _vt(vt,
false);
745 template<
typename _Tp,
int m,
int n,
int nm>
inline void
748 assert( nm ==
MIN(m, n));
749 Mat _a(a,
false), _w(w,
false);
754 template<
typename _Tp,
int m,
int n,
int nm,
int nb>
inline void
759 assert( nm ==
MIN(m, n));
760 Mat _u(u,
false), _w(w,
false), _vt(vt,
false), _rhs(rhs,
false), _dst(dst,
false);
774 :
Mat(_rows, _cols,
DataType<_Tp>::type) { *
this = value; }
777 :
Mat(_sz.height, _sz.width,
DataType<_Tp>::type) {}
780 :
Mat(_sz.height, _sz.width,
DataType<_Tp>::type) { *
this = value; }
785 template<
typename _Tp>
inline Mat_<_Tp>::Mat_(
int _dims,
const int* _sz,
const _Tp& _s)
797 template<
typename _Tp>
inline Mat_<_Tp>::Mat_(
int _rows,
int _cols, _Tp* _data,
size_t steps)
798 :
Mat(_rows, _cols,
DataType<_Tp>::type, _data, steps) {}
801 :
Mat(m, rowRange, colRange) {}
806 template<
typename _Tp>
template<
int n>
inline
815 template<
typename _Tp>
template<
int m,
int n>
inline
841 :
Mat(commaInitializer) {}
844 :
Mat(vec, copyData) {}
933 template<
typename _Tp>
inline size_t Mat_<_Tp>::stepT(
int i)
const {
return step.p[i]/elemSize(); }
934 template<
typename _Tp>
inline size_t Mat_<_Tp>::step1(
int i)
const {
return step.p[i]/elemSize1(); }
943 {
return Mat_<_Tp>(*
this, rowRange, colRange); }
952 {
return (_Tp*)ptr(y); }
954 {
return (
const _Tp*)ptr(y); }
959 (
unsigned)i0 < (
unsigned)size.p[0] &&
960 (
unsigned)i1 < (
unsigned)size.p[1] &&
962 return ((_Tp*)(data + step.p[0]*i0))[i1];
968 (
unsigned)i0 < (
unsigned)size.p[0] &&
969 (
unsigned)i1 < (
unsigned)size.p[1] &&
971 return ((
const _Tp*)(data + step.p[0]*i0))[i1];
977 (
unsigned)pt.
y < (
unsigned)size.p[0] &&
978 (
unsigned)pt.
x < (
unsigned)size.p[1] &&
980 return ((_Tp*)(data + step.p[0]*pt.
y))[pt.
x];
986 (
unsigned)pt.
y < (
unsigned)size.p[0] &&
987 (
unsigned)pt.
x < (
unsigned)size.p[1] &&
989 return ((
const _Tp*)(data + step.p[0]*pt.
y))[pt.
x];
994 return Mat::at<_Tp>(idx);
999 return Mat::at<_Tp>(idx);
1004 return this->at<_Tp>(i0);
1009 return this->at<_Tp>(i0);
1014 return this->at<_Tp>(i0, i1, i2);
1019 return this->at<_Tp>(i0, i1, i2);
1042 template<
typename T1,
typename T2,
typename Op>
inline void
1050 for( y = 0; y < rows; y++ )
1052 const T1* src = m1[
y];
1055 for( x = 0; x < cols; x++ )
1056 dst[x] = op(src[x]);
1060 template<
typename T1,
typename T2,
typename T3,
typename Op>
inline void
1067 for( y = 0; y < rows; y++ )
1069 const T1* src1 = m1[
y];
1070 const T2* src2 = m2[
y];
1073 for( x = 0; x < cols; x++ )
1074 dst[x] = op( src1[x], src2[x] );
1086 virtual bool elementWise(
const MatExpr& expr)
const;
1087 virtual void assign(
const MatExpr& expr,
Mat& m,
int type=-1)
const = 0;
1088 virtual void roi(
const MatExpr& expr,
const Range& rowRange,
1090 virtual void diag(
const MatExpr& expr,
int d,
MatExpr& res)
const;
1091 virtual void augAssignAdd(
const MatExpr& expr,
Mat& m)
const;
1092 virtual void augAssignSubtract(
const MatExpr& expr,
Mat& m)
const;
1093 virtual void augAssignMultiply(
const MatExpr& expr,
Mat& m)
const;
1094 virtual void augAssignDivide(
const MatExpr& expr,
Mat& m)
const;
1095 virtual void augAssignAnd(
const MatExpr& expr,
Mat& m)
const;
1096 virtual void augAssignOr(
const MatExpr& expr,
Mat& m)
const;
1097 virtual void augAssignXor(
const MatExpr& expr,
Mat& m)
const;
1125 : op(_op),
flags(_flags), a(_a), b(_b), c(_c), alpha(_alpha), beta(_beta), s(_s) {}
1130 op->assign(*
this, m);
1147 Mat cross(
const Mat& m)
const;
1148 double dot(
const Mat& m)
const;
1240 template<
typename _Tp>
static inline MatExpr
min(
const Mat_<_Tp>& a,
double s)
1242 return cv::min((
const Mat&)a, s);
1245 template<
typename _Tp>
static inline MatExpr
min(
double s,
const Mat_<_Tp>& a)
1247 return cv::min((
const Mat&)a, s);
1252 return cv::max((
const Mat&)a, (
const Mat&)b);
1255 template<
typename _Tp>
static inline MatExpr
max(
const Mat_<_Tp>& a,
double s)
1257 return cv::max((
const Mat&)a, s);
1260 template<
typename _Tp>
static inline MatExpr
max(
double s,
const Mat_<_Tp>& a)
1262 return cv::max((
const Mat&)a, s);
1282 template<
typename _Tp>
static inline MatExpr
abs(
const Mat_<_Tp>& m)
1284 return cv::abs((
const Mat&)m);
1301 static inline Mat& operator += (
const Mat& a,
const Mat& b)
1307 static inline Mat& operator += (
const Mat& a,
const Scalar& s)
1313 template<
typename _Tp>
static inline
1320 template<
typename _Tp>
static inline
1327 static inline Mat& operator += (
const Mat& a,
const MatExpr& b)
1329 b.op->augAssignAdd(b, (Mat&)a);
1333 template<
typename _Tp>
static inline
1336 b.op->augAssignAdd(b, (Mat&)a);
1340 static inline Mat& operator -= (
const Mat& a,
const Mat& b)
1346 static inline Mat& operator -= (
const Mat& a,
const Scalar& s)
1352 template<
typename _Tp>
static inline
1359 template<
typename _Tp>
static inline
1366 static inline Mat& operator -= (
const Mat& a,
const MatExpr& b)
1368 b.op->augAssignSubtract(b, (Mat&)a);
1372 template<
typename _Tp>
static inline
1375 b.op->augAssignSubtract(b, (Mat&)a);
1379 static inline Mat& operator *= (
const Mat& a,
const Mat& b)
1381 gemm(a, b, 1, Mat(), 0, (Mat&)a, 0);
1385 static inline Mat& operator *= (
const Mat& a,
double s)
1387 a.convertTo((Mat&)a, -1, s);
1391 template<
typename _Tp>
static inline
1394 gemm(a, b, 1, Mat(), 0, (Mat&)a, 0);
1398 template<
typename _Tp>
static inline
1401 a.convertTo((Mat&)a, -1, s);
1405 static inline Mat& operator *= (
const Mat& a,
const MatExpr& b)
1407 b.op->augAssignMultiply(b, (Mat&)a);
1411 template<
typename _Tp>
static inline
1414 b.op->augAssignMultiply(b, (Mat&)a);
1418 static inline Mat& operator /= (
const Mat& a,
const Mat& b)
1424 static inline Mat& operator /= (
const Mat& a,
double s)
1426 a.convertTo((Mat&)a, -1, 1./s);
1430 template<
typename _Tp>
static inline
1437 template<
typename _Tp>
static inline
1440 a.convertTo((Mat&)a, -1, 1./s);
1444 static inline Mat& operator /= (
const Mat& a,
const MatExpr& b)
1446 b.op->augAssignDivide(b, (Mat&)a);
1450 template<
typename _Tp>
static inline
1453 b.op->augAssignDivide(b, (Mat&)a);
1459 static inline Mat& operator &= (
const Mat& a,
const Mat& b)
1465 static inline Mat& operator &= (
const Mat& a,
const Scalar& s)
1471 template<
typename _Tp>
static inline Mat_<_Tp>&
1478 template<
typename _Tp>
static inline Mat_<_Tp>&
1485 static inline Mat& operator |= (
const Mat& a,
const Mat& b)
1491 static inline Mat& operator |= (
const Mat& a,
const Scalar& s)
1497 template<
typename _Tp>
static inline Mat_<_Tp>&
1504 template<
typename _Tp>
static inline Mat_<_Tp>&
1511 static inline Mat& operator ^= (
const Mat& a,
const Mat& b)
1517 static inline Mat& operator ^= (
const Mat& a,
const Scalar& s)
1523 template<
typename _Tp>
static inline Mat_<_Tp>&
1530 template<
typename _Tp>
static inline Mat_<_Tp>&
1540 {
split(src, (vector<Mat>&)mv ); }
1577 : m(0), elemSize(0), ptr(0), sliceStart(0), sliceEnd(0) {}
1580 : m(_m), elemSize(_m->elemSize()), ptr(0), sliceStart(0), sliceEnd(0)
1582 if( m && m->isContinuous() )
1587 seek((
const int*)0);
1591 : m(_m), elemSize(_m->elemSize()), ptr(0), sliceStart(0), sliceEnd(0)
1594 if( m->isContinuous() )
1599 int idx[]={_row, _col};
1604 : m(_m), elemSize(_m->elemSize()), ptr(0), sliceStart(0), sliceEnd(0)
1607 if( m->isContinuous() )
1612 int idx[]={_pt.
y, _pt.
x};
1617 : m(it.m), elemSize(it.elemSize), ptr(it.ptr), sliceStart(it.sliceStart), sliceEnd(it.sliceEnd)
1631 if( !m || ofs == 0 )
1644 {
return (*
this += -ofs); }
1713 {
return (*
this += -ofs); }
1809 if( m->isContinuous() )
1811 ptrdiff_t ofs = ptr - (_Tp*)m->data;
1812 int y = (
int)(ofs / m->cols),
x = (
int)(ofs - (ptrdiff_t)y*m->cols);
1817 ptrdiff_t ofs = (
uchar*)ptr - m->data;
1818 int y = (
int)(ofs / m->step),
x = (
int)((ofs - y*m->step)/
sizeof(_Tp));
1825 {
return a.
m == b.
m && a.
ptr == b.
ptr; }
1827 template<
typename _Tp>
static inline bool
1828 operator != (
const MatConstIterator& a,
const MatConstIterator& b)
1829 {
return !(a == b); }
1831 template<
typename _Tp>
static inline bool
1833 {
return a.m == b.m && a.ptr == b.ptr; }
1835 template<
typename _Tp>
static inline bool
1837 {
return a.m != b.m || a.ptr != b.ptr; }
1839 template<
typename _Tp>
static inline bool
1841 {
return a.m == b.m && a.ptr == b.ptr; }
1843 template<
typename _Tp>
static inline bool
1845 {
return a.m != b.m || a.ptr != b.ptr; }
1848 operator < (
const MatConstIterator& a,
const MatConstIterator& b)
1849 {
return a.ptr < b.ptr; }
1852 operator > (
const MatConstIterator& a,
const MatConstIterator& b)
1853 {
return a.ptr > b.ptr; }
1856 operator <= (
const MatConstIterator& a,
const MatConstIterator& b)
1857 {
return a.ptr <= b.ptr; }
1860 operator >= (
const MatConstIterator& a,
const MatConstIterator& b)
1861 {
return a.ptr >= b.ptr; }
1865 static inline MatConstIterator
operator + (
const MatConstIterator& a, ptrdiff_t ofs)
1866 { MatConstIterator b = a;
return b += ofs; }
1868 static inline MatConstIterator
operator + (ptrdiff_t ofs,
const MatConstIterator& a)
1869 { MatConstIterator b = a;
return b += ofs; }
1871 static inline MatConstIterator
operator - (
const MatConstIterator& a, ptrdiff_t ofs)
1872 { MatConstIterator b = a;
return b += -ofs; }
1887 {
return *(*
this + i); }
1890 {
return *(_Tp*)MatConstIterator::operator [](i); }
1898 { MatConstIterator t = (
const MatConstIterator&)a + ofs;
return (
MatIterator_<_Tp>&)t; }
1902 { MatConstIterator t = (
const MatConstIterator&)a - ofs;
return (
MatIterator_<_Tp>&)t; }
1905 {
return *(*
this + i); }
1908 {
return Mat::begin<_Tp>(); }
1911 {
return Mat::end<_Tp>(); }
1914 {
return Mat::begin<_Tp>(); }
1917 {
return Mat::end<_Tp>(); }
1925 *this->it = _Tp(v); ++this->it;
1942 operator << (const Mat_<_Tp>& m, T2 val)
1945 return (commaInitializer, val);
1951 :
flags(MAGIC_VAL), hdr(0)
1956 :
flags(MAGIC_VAL), hdr(0)
1958 create(_dims, _sizes, _type);
2061 return (
size_t)(unsigned)i0*
HASH_SCALE + (
unsigned)i1;
2071 size_t h = (unsigned)idx[0];
2075 for( i = 1; i < d; i++ )
2081 {
return *(_Tp*)((
SparseMat*)
this)->
ptr(i0,
true, hashval); }
2084 {
return *(_Tp*)((
SparseMat*)
this)->
ptr(i0, i1,
true, hashval); }
2086 template<
typename _Tp>
inline _Tp&
SparseMat::ref(
int i0,
int i1,
int i2,
size_t* hashval)
2087 {
return *(_Tp*)((
SparseMat*)
this)->
ptr(i0, i1, i2,
true, hashval); }
2090 {
return *(_Tp*)((
SparseMat*)
this)->
ptr(idx,
true, hashval); }
2094 const _Tp* p = (
const _Tp*)((
SparseMat*)
this)->
ptr(i0,
false, hashval);
2095 return p ? *p : _Tp();
2100 const _Tp* p = (
const _Tp*)((
SparseMat*)
this)->
ptr(i0, i1,
false, hashval);
2101 return p ? *p : _Tp();
2104 template<
typename _Tp>
inline _Tp
SparseMat::value(
int i0,
int i1,
int i2,
size_t* hashval)
const
2106 const _Tp* p = (
const _Tp*)((
SparseMat*)
this)->
ptr(i0, i1, i2,
false, hashval);
2107 return p ? *p : _Tp();
2112 const _Tp* p = (
const _Tp*)((
SparseMat*)
this)->
ptr(idx,
false, hashval);
2113 return p ? *p : _Tp();
2117 {
return (
const _Tp*)((
SparseMat*)
this)->ptr(i0,
false, hashval); }
2119 template<
typename _Tp>
inline const _Tp*
SparseMat::find(
int i0,
int i1,
size_t* hashval)
const
2120 {
return (
const _Tp*)((
SparseMat*)
this)->ptr(i0, i1,
false, hashval); }
2122 template<
typename _Tp>
inline const _Tp*
SparseMat::find(
int i0,
int i1,
int i2,
size_t* hashval)
const
2123 {
return (
const _Tp*)((
SparseMat*)
this)->ptr(i0, i1, i2,
false, hashval); }
2125 template<
typename _Tp>
inline const _Tp*
SparseMat::find(
const int* idx,
size_t* hashval)
const
2126 {
return (
const _Tp*)((
SparseMat*)
this)->ptr(idx,
false, hashval); }
2166 : m(0), hashidx(0), ptr(0)
2171 : m(it.m), hashidx(it.hashidx), ptr(it.ptr)
2178 static inline bool operator != (
const SparseMatConstIterator& it1,
const SparseMatConstIterator& it2)
2179 {
return !(it1 == it2); }
2194 {
return *(_Tp*)
ptr; }
2198 return ptr && m && m->hdr ?
2214 hashidx = m->hdr->hashtab.size();
2238 {
return *(_Tp*)
ptr; }
2279 CV_XADD(&this->hdr->refcount, 1);
2299 if( m.
hdr ) CV_XADD(&m.
hdr->refcount, 1);
2328 template<
typename _Tp>
inline void
2334 template<
typename _Tp>
inline
2349 template<
typename _Tp>
inline _Tp&
2351 {
return SparseMat::ref<_Tp>(i0, hashval); }
2353 template<
typename _Tp>
inline _Tp
2355 {
return SparseMat::value<_Tp>(i0, hashval); }
2357 template<
typename _Tp>
inline _Tp&
2359 {
return SparseMat::ref<_Tp>(i0, i1, hashval); }
2361 template<
typename _Tp>
inline _Tp
2363 {
return SparseMat::value<_Tp>(i0, i1, hashval); }
2365 template<
typename _Tp>
inline _Tp&
2367 {
return SparseMat::ref<_Tp>(i0, i1, i2, hashval); }
2369 template<
typename _Tp>
inline _Tp
2371 {
return SparseMat::value<_Tp>(i0, i1, i2, hashval); }
2373 template<
typename _Tp>
inline _Tp&
2375 {
return SparseMat::ref<_Tp>(idx, hashval); }
2377 template<
typename _Tp>
inline _Tp
2379 {
return SparseMat::value<_Tp>(idx, hashval); }
2393 template<
typename _Tp>
inline
2397 template<
typename _Tp>
inline
2402 template<
typename _Tp>
inline
2411 template<
typename _Tp>
inline const _Tp&
2413 {
return *(
const _Tp*)this->ptr; }
2430 template<
typename _Tp>
inline
2434 template<
typename _Tp>
inline
2439 template<
typename _Tp>
inline
2448 template<
typename _Tp>
inline _Tp&
2450 {
return *(_Tp*)this->ptr; }