45#ifndef OPENCV_CORE_MATRIX_OPERATIONS_HPP
46#define OPENCV_CORE_MATRIX_OPERATIONS_HPP
49# error mat.inl.hpp header must be compiled as C++
53#pragma warning( push )
54#pragma warning( disable: 4127 5054 )
57#if defined(CV_SKIP_DISABLE_CLANG_ENUM_WARNINGS)
59#elif defined(CV_FORCE_DISABLE_CLANG_ENUM_WARNINGS)
60 #define CV_DISABLE_CLANG_ENUM_WARNINGS
61#elif defined(__clang__) && defined(__has_warning)
62 #if __has_warning("-Wdeprecated-enum-enum-conversion") && __has_warning("-Wdeprecated-anon-enum-enum-conversion")
63 #define CV_DISABLE_CLANG_ENUM_WARNINGS
66#ifdef CV_DISABLE_CLANG_ENUM_WARNINGS
67#pragma clang diagnostic push
68#pragma clang diagnostic ignored "-Wdeprecated-enum-enum-conversion"
69#pragma clang diagnostic ignored "-Wdeprecated-anon-enum-enum-conversion"
81template<
typename _Tp>
static inline
84 CV_StaticAssert(
sizeof(_Tp) <=
CV_CN_MAX,
"sizeof(_Tp) is too large");
85 const int elemSize =
sizeof(_Tp);
92{
flags = _flags;
obj = (
void*)_obj; }
95{
flags = _flags;
obj = (
void*)_obj;
sz = _sz; }
108template<
typename _Tp>
inline
112template<
typename _Tp, std::
size_t _Nm>
inline
116template<std::
size_t _Nm>
inline
124template<
typename _Tp>
inline
128template<
typename _Tp>
inline
132template<
typename _Tp,
int m,
int n>
inline
136template<
typename _Tp>
inline
140template<
typename _Tp>
inline
159template<
typename _Tp>
inline
168template<
typename _Tp, std::
size_t _Nm>
inline
173 v.obj = (
void*)
arr.data();
183 return *(
const Mat*)
obj;
207template<
typename _Tp>
inline
211template<
typename _Tp, std::
size_t _Nm>
inline
215template<std::
size_t _Nm>
inline
219template<
typename _Tp>
inline
223template<
typename _Tp>
inline
227template<
typename _Tp>
inline
231template<
typename _Tp,
int m,
int n>
inline
235template<
typename _Tp>
inline
239template<
typename _Tp>
inline
243template<
typename _Tp, std::
size_t _Nm>
inline
247template<std::
size_t _Nm>
inline
251template<
typename _Tp>
inline
255template<
typename _Tp>
inline
259template<
typename _Tp>
inline
263template<
typename _Tp,
int m,
int n>
inline
267template<
typename _Tp>
inline
305template<
typename _Tp>
inline
314template<
typename _Tp, std::
size_t _Nm>
inline
319 v.obj = (
void*)
arr.data();
333template<
typename _Tp>
inline
337template<
typename _Tp, std::
size_t _Nm>
inline
341template<std::
size_t _Nm>
inline
345template<
typename _Tp>
inline
349template<
typename _Tp>
inline
353template<
typename _Tp>
inline
357template<
typename _Tp,
int m,
int n>
inline
361template<
typename _Tp>
inline
365template<
typename _Tp>
inline
369template<
typename _Tp, std::
size_t _Nm>
inline
373template<std::
size_t _Nm>
inline
377template<
typename _Tp>
inline
381template<
typename _Tp>
inline
385template<
typename _Tp>
inline
389template<
typename _Tp,
int m,
int n>
inline
393template<
typename _Tp>
inline
433template<
typename _Tp>
inline
442template<
typename _Tp, std::
size_t _Nm>
inline
447 v.obj = (
void*)
arr.data();
461template<
typename _Tp>
inline
464 cols(1),
data(0), datastart(0), dataend(0), datalimit(0), allocator(0), u(0),
size(&
rows),
step(0)
472 datalimit = dataend = datastart +
rows *
step[0];
475 Mat((
int)vec.
size(), 1, traits::Type<_Tp>::value, (
uchar*)&vec[0]).copyTo(*
this);
478template<
typename _Tp,
typename>
inline
483 Mat((
int)list.
size(), 1, traits::Type<_Tp>::value, (
uchar*)list.
begin()).copyTo(*
this);
486template<
typename _Tp>
inline
490 size_t size_total = 1;
495 Mat((
int)
sizes.size(), (
int*)
sizes.begin(), traits::Type<_Tp>::value, (
uchar*)list.
begin()).copyTo(*
this);
498template<
typename _Tp, std::
size_t _Nm>
inline
501 cols(1),
data(0), datastart(0), dataend(0), datalimit(0), allocator(0), u(0),
size(&
rows),
step(0)
509 datalimit = dataend = datastart +
rows *
step[0];
512 Mat((
int)
arr.size(), 1, traits::Type<_Tp>::value, (
uchar*)
arr.data()).copyTo(*
this);
515template<
typename _Tp,
int n>
inline
516Mat::Mat(
const Vec<_Tp, n>& vec,
bool copyData)
518 datastart(0), dataend(0), datalimit(0), allocator(0), u(0),
size(&
rows),
step(0)
524 datalimit = dataend = datastart +
rows *
step[0];
527 Mat(n, 1, traits::Type<_Tp>::value, (
void*)vec.val).copyTo(*
this);
531template<
typename _Tp,
int m,
int n>
inline
532Mat::Mat(
const Matx<_Tp,m,n>&
M,
bool copyData)
534 datastart(0), dataend(0), datalimit(0), allocator(0), u(0),
size(&
rows),
step(0)
539 step[1] =
sizeof(_Tp);
541 datalimit = dataend = datastart +
rows *
step[0];
544 Mat(m, n, traits::Type<_Tp>::value, (
uchar*)
M.val).copyTo(*
this);
547template<
typename _Tp>
inline
548Mat::Mat(
const Point_<_Tp>&
pt,
bool copyData)
550 datastart(0), dataend(0), datalimit(0), allocator(0), u(0),
size(&
rows),
step(0)
556 datalimit = dataend = datastart +
rows *
step[0];
560 create(2, 1, traits::Type<_Tp>::value);
566template<
typename _Tp>
inline
567Mat::Mat(
const Point3_<_Tp>&
pt,
bool copyData)
569 datastart(0), dataend(0), datalimit(0), allocator(0), u(0),
size(&
rows),
step(0)
575 datalimit = dataend = datastart +
rows *
step[0];
579 create(3, 1, traits::Type<_Tp>::value);
586template<
typename _Tp>
inline
587Mat::Mat(
const MatCommaInitializer_<_Tp>& commaInitializer)
589 datastart(0), dataend(0), allocator(0), u(0),
size(&
rows)
591 *
this = commaInitializer.operator Mat_<_Tp>();
595Mat Mat::row(
int y)
const
597 return Mat(*
this, Range(
y,
y + 1), Range::all());
601Mat Mat::col(
int x)
const
603 return Mat(*
this, Range::all(), Range(
x,
x + 1));
607Mat Mat::rowRange(
int startrow,
int endrow)
const
609 return Mat(*
this, Range(startrow, endrow), Range::all());
613Mat Mat::rowRange(
const Range&
r)
const
615 return Mat(*
this,
r, Range::all());
619Mat Mat::colRange(
int startcol,
int endcol)
const
621 return Mat(*
this, Range::all(), Range(startcol, endcol));
625Mat Mat::colRange(
const Range&
r)
const
627 return Mat(*
this, Range::all(),
r);
631Mat Mat::operator()( Range _rowRange, Range _colRange )
const
633 return Mat(*
this, _rowRange, _colRange);
637Mat Mat::operator()(
const Rect& roi )
const
639 return Mat(*
this, roi);
643Mat Mat::operator()(
const Range*
ranges)
const
645 return Mat(*
this,
ranges);
651 return Mat(*
this,
ranges);
655bool Mat::isContinuous()
const
657 return (
flags & CONTINUOUS_FLAG) != 0;
661bool Mat::isSubmatrix()
const
663 return (
flags & SUBMATRIX_FLAG) != 0;
667size_t Mat::elemSize()
const
675size_t Mat::elemSize1()
const
687int Mat::depth()
const
693int Mat::channels()
const
706const uchar* Mat::ptr(
int y)
const
712template<
typename _Tp>
inline
719template<
typename _Tp>
inline
720const _Tp* Mat::ptr(
int y)
const
723 return (
const _Tp*)(
data +
step.p[0] *
y);
727uchar* Mat::ptr(
int i0,
int i1)
737const uchar* Mat::ptr(
int i0,
int i1)
const
746template<
typename _Tp>
inline
747_Tp* Mat::ptr(
int i0,
int i1)
756template<
typename _Tp>
inline
757const _Tp* Mat::ptr(
int i0,
int i1)
const
763 return (
const _Tp*)(
data + i0 *
step.p[0] + i1 *
step.p[1]);
767uchar* Mat::ptr(
int i0,
int i1,
int i2)
778const uchar* Mat::ptr(
int i0,
int i1,
int i2)
const
788template<
typename _Tp>
inline
789_Tp* Mat::ptr(
int i0,
int i1,
int i2)
799template<
typename _Tp>
inline
800const _Tp* Mat::ptr(
int i0,
int i1,
int i2)
const
807 return (
const _Tp*)(
data + i0 *
step.p[0] + i1 *
step.p[1] + i2 *
step.p[2]);
816 for( i = 0; i < d; i++ )
825const uchar* Mat::ptr(
const int*
idx)
const
830 for( i = 0; i < d; i++ )
838template<
typename _Tp>
inline
839_Tp* Mat::ptr(
const int*
idx)
844 for( i = 0; i < d; i++ )
852template<
typename _Tp>
inline
853const _Tp* Mat::ptr(
const int*
idx)
const
858 for( i = 0; i < d; i++ )
863 return (
const _Tp*)p;
866template<
int n>
inline
867uchar* Mat::ptr(
const Vec<int, n>&
idx)
869 return Mat::ptr(
idx.val);
872template<
int n>
inline
873const uchar* Mat::ptr(
const Vec<int, n>&
idx)
const
875 return Mat::ptr(
idx.val);
878template<
typename _Tp,
int n>
inline
879_Tp* Mat::ptr(
const Vec<int, n>&
idx)
882 return Mat::ptr<_Tp>(
idx.val);
885template<
typename _Tp,
int n>
inline
886const _Tp* Mat::ptr(
const Vec<int, n>&
idx)
const
889 return Mat::ptr<_Tp>(
idx.val);
893template<
typename _Tp>
inline
894_Tp& Mat::at(
int i0,
int i1)
901 return ((_Tp*)(
data +
step.p[0] * i0))[i1];
904template<
typename _Tp>
inline
905const _Tp& Mat::at(
int i0,
int i1)
const
912 return ((
const _Tp*)(
data +
step.p[0] * i0))[i1];
915template<
typename _Tp>
inline
916_Tp& Mat::at(Point
pt)
926template<
typename _Tp>
inline
927const _Tp& Mat::at(Point
pt)
const
937template<
typename _Tp>
inline
944 if( isContinuous() ||
size.p[0] == 1 )
945 return ((_Tp*)
data)[i0];
947 return *(_Tp*)(
data +
step.p[0] * i0);
948 int i = i0 /
cols, j = i0 - i *
cols;
949 return ((_Tp*)(
data +
step.p[0] * i))[j];
952template<
typename _Tp>
inline
953const _Tp& Mat::at(
int i0)
const
959 if( isContinuous() ||
size.p[0] == 1 )
960 return ((
const _Tp*)
data)[i0];
962 return *(
const _Tp*)(
data +
step.p[0] * i0);
963 int i = i0 /
cols, j = i0 - i *
cols;
964 return ((
const _Tp*)(
data +
step.p[0] * i))[j];
967template<
typename _Tp>
inline
968_Tp& Mat::at(
int i0,
int i1,
int i2)
971 return *(_Tp*)ptr(i0, i1, i2);
974template<
typename _Tp>
inline
975const _Tp& Mat::at(
int i0,
int i1,
int i2)
const
978 return *(
const _Tp*)ptr(i0, i1, i2);
981template<
typename _Tp>
inline
982_Tp& Mat::at(
const int*
idx)
985 return *(_Tp*)ptr(
idx);
988template<
typename _Tp>
inline
989const _Tp& Mat::at(
const int*
idx)
const
992 return *(
const _Tp*)ptr(
idx);
995template<
typename _Tp,
int n>
inline
996_Tp& Mat::at(
const Vec<int, n>&
idx)
999 return *(_Tp*)ptr(
idx.val);
1002template<
typename _Tp,
int n>
inline
1003const _Tp& Mat::at(
const Vec<int, n>&
idx)
const
1006 return *(
const _Tp*)ptr(
idx.val);
1009template<
typename _Tp>
inline
1010MatConstIterator_<_Tp> Mat::begin()
const
1013 return MatConstIterator_<_Tp>();
1015 return MatConstIterator_<_Tp>((
const Mat_<_Tp>*)
this);
1018template<
typename _Tp>
inline
1024 MatConstIterator_<_Tp> it((
const Mat_<_Tp>*)
this);
1029template<
typename _Tp>
inline
1030MatConstIterator_<_Tp> Mat::end()
const
1033 return MatConstIterator_<_Tp>();
1035 MatConstIterator_<_Tp> it((
const Mat_<_Tp>*)
this);
1040template<
typename _Tp>
inline
1049template<
typename _Tp>
inline
1050MatIterator_<_Tp> Mat::begin()
1053 return MatIterator_<_Tp>();
1055 return MatIterator_<_Tp>((Mat_<_Tp>*)
this);
1058template<
typename _Tp>
inline
1064 MatIterator_<_Tp> it((Mat_<_Tp>*)
this);
1069template<
typename _Tp>
inline
1070MatIterator_<_Tp> Mat::end()
1073 return MatIterator_<_Tp>();
1075 MatIterator_<_Tp> it((Mat_<_Tp>*)
this);
1080template<
typename _Tp>
inline
1089template<
typename _Tp,
typename Functor>
inline
1090void Mat::forEach(
const Functor&
operation) {
1094template<
typename _Tp,
typename Functor>
inline
1095void Mat::forEach(
const Functor&
operation)
const {
1097 (
const_cast<Mat*
>(
this))->forEach<_Tp>(
operation);
1100template<
typename _Tp>
inline
1108template<
typename _Tp, std::
size_t _Nm>
inline
1116template<
typename _Tp,
int n>
inline
1117Mat::operator Vec<_Tp, n>()
const
1122 if( isContinuous() &&
type() == traits::Type<_Tp>::value )
1123 return Vec<_Tp, n>((_Tp*)
data);
1125 Mat tmp(
rows,
cols, traits::Type<_Tp>::value, v.val);
1126 convertTo(tmp, tmp.type());
1130template<
typename _Tp,
int m,
int n>
inline
1131Mat::operator Matx<_Tp, m, n>()
const
1135 if( isContinuous() &&
type() == traits::Type<_Tp>::value )
1136 return Matx<_Tp, m, n>((_Tp*)
data);
1137 Matx<_Tp, m, n> mtx;
1138 Mat tmp(
rows,
cols, traits::Type<_Tp>::value, mtx.val);
1139 convertTo(tmp, tmp.type());
1143template<
typename _Tp>
inline
1144void Mat::push_back(
const _Tp&
elem)
1148 *
this = Mat(1, 1, traits::Type<_Tp>::value, (
void*)&
elem).clone();
1154 if( !isSubmatrix() && isContinuous() && tmp <= datalimit )
1163template<
typename _Tp>
inline
1164void Mat::push_back(
const Mat_<_Tp>& m)
1166 push_back((
const Mat&)m);
1170void Mat::push_back(
const MatExpr& expr)
1172 push_back(
static_cast<Mat
>(expr));
1176template<
typename _Tp>
inline
1196Size MatSize::operator()()
const
1199 return Size(p[1], p[0]);
1203const int& MatSize::operator[](
int i)
const
1206#ifdef __OPENCV_BUILD
1213int& MatSize::operator[](
int i)
1216#ifdef __OPENCV_BUILD
1229bool MatSize::operator != (
const MatSize& sz)
const CV_NOEXCEPT
1231 return !(*
this == sz);
1241 p = buf; p[0] = p[1] = 0;
1247 p = buf; p[0] = s; p[1] = 0;
1251const size_t& MatStep::operator[](
int i)
const CV_NOEXCEPT
1262inline MatStep::operator size_t()
const
1268inline MatStep& MatStep::operator = (
size_t s)
1279template<
typename _Tp>
inline
1283 flags = (
flags & ~CV_MAT_TYPE_MASK) + traits::Type<_Tp>::value;
1286template<
typename _Tp>
inline
1287Mat_<_Tp>::Mat_(
int _rows,
int _cols)
1288 : Mat(_rows, _cols, traits::Type<_Tp>::
value)
1292template<
typename _Tp>
inline
1293Mat_<_Tp>::Mat_(
int _rows,
int _cols,
const _Tp&
value)
1294 : Mat(_rows, _cols, traits::Type<_Tp>::
value)
1299template<
typename _Tp>
inline
1300Mat_<_Tp>::Mat_(Size _sz)
1301 : Mat(_sz.height, _sz.width, traits::Type<_Tp>::
value)
1304template<
typename _Tp>
inline
1305Mat_<_Tp>::Mat_(Size _sz,
const _Tp&
value)
1306 : Mat(_sz.height, _sz.width, traits::Type<_Tp>::
value)
1311template<
typename _Tp>
inline
1312Mat_<_Tp>::Mat_(
int _dims,
const int* _sz)
1313 : Mat(_dims, _sz, traits::Type<_Tp>::
value)
1316template<
typename _Tp>
inline
1317Mat_<_Tp>::Mat_(
int _dims,
const int* _sz,
const _Tp& _s)
1318 : Mat(_dims, _sz, traits::Type<_Tp>::
value,
Scalar(_s))
1321template<
typename _Tp>
inline
1322Mat_<_Tp>::Mat_(
int _dims,
const int* _sz, _Tp* _data,
const size_t* _steps)
1323 : Mat(_dims, _sz, traits::Type<_Tp>::
value, _data, _steps)
1326template<
typename _Tp>
inline
1327Mat_<_Tp>::Mat_(
const Mat_<_Tp>& m,
const Range*
ranges)
1331template<
typename _Tp>
inline
1336template<
typename _Tp>
inline
1337Mat_<_Tp>::Mat_(
const Mat& m)
1340 flags = (
flags & ~CV_MAT_TYPE_MASK) + traits::Type<_Tp>::value;
1344template<
typename _Tp>
inline
1345Mat_<_Tp>::Mat_(
const Mat_& m)
1349template<
typename _Tp>
inline
1350Mat_<_Tp>::Mat_(
int _rows,
int _cols, _Tp* _data,
size_t steps)
1351 : Mat(_rows, _cols, traits::Type<_Tp>::
value, _data, steps)
1354template<
typename _Tp>
inline
1355Mat_<_Tp>::Mat_(
const Mat_& m,
const Range& _rowRange,
const Range& _colRange)
1356 : Mat(m, _rowRange, _colRange)
1359template<
typename _Tp>
inline
1360Mat_<_Tp>::Mat_(
const Mat_& m,
const Rect& roi)
1364template<
typename _Tp>
template<
int n>
inline
1365Mat_<_Tp>::Mat_(
const Vec<
typename DataType<_Tp>::channel_type, n>& vec,
bool copyData)
1366 : Mat(n / DataType<_Tp>::
channels, 1, traits::Type<_Tp>::
value, (void*)&vec)
1368 CV_Assert(n%DataType<_Tp>::channels == 0);
1373template<
typename _Tp>
template<
int m,
int n>
inline
1374Mat_<_Tp>::Mat_(
const Matx<
typename DataType<_Tp>::channel_type, m, n>&
M,
bool copyData)
1375 : Mat(m, n / DataType<_Tp>::
channels, traits::Type<_Tp>::
value, (void*)&
M)
1377 CV_Assert(n % DataType<_Tp>::channels == 0);
1382template<
typename _Tp>
inline
1383Mat_<_Tp>::Mat_(
const Point_<
typename DataType<_Tp>::channel_type>&
pt,
bool copyData)
1384 : Mat(2 / DataType<_Tp>::
channels, 1, traits::Type<_Tp>::
value, (void*)&
pt)
1386 CV_Assert(2 % DataType<_Tp>::channels == 0);
1391template<
typename _Tp>
inline
1392Mat_<_Tp>::Mat_(
const Point3_<
typename DataType<_Tp>::channel_type>&
pt,
bool copyData)
1393 : Mat(3 / DataType<_Tp>::
channels, 1, traits::Type<_Tp>::
value, (void*)&
pt)
1395 CV_Assert(3 % DataType<_Tp>::channels == 0);
1400template<
typename _Tp>
inline
1401Mat_<_Tp>::Mat_(
const MatCommaInitializer_<_Tp>& commaInitializer)
1402 : Mat(commaInitializer)
1405template<
typename _Tp>
inline
1407 : Mat(vec, copyData)
1410template<
typename _Tp>
inline
1415template<
typename _Tp>
inline
1420template<
typename _Tp>
template<std::
size_t _Nm>
inline
1422 : Mat(
arr, copyData)
1425template<
typename _Tp>
inline
1426Mat_<_Tp>& Mat_<_Tp>::operator = (
const Mat& m)
1433 if( traits::Type<_Tp>::value == m.type() )
1435 Mat::operator = (m);
1438 if( traits::Depth<_Tp>::value == m.depth() )
1440 return (*
this = m.reshape(DataType<_Tp>::channels, m.dims, 0));
1442 CV_Assert(DataType<_Tp>::channels == m.channels() || m.empty());
1443 m.convertTo(*
this,
type());
1447template<
typename _Tp>
inline
1448Mat_<_Tp>& Mat_<_Tp>::operator = (
const Mat_& m)
1454template<
typename _Tp>
inline
1455Mat_<_Tp>& Mat_<_Tp>::operator = (
const _Tp& s)
1457 typedef typename DataType<_Tp>::vec_type VT;
1458 Mat::operator=(
Scalar((
const VT&)s));
1462template<
typename _Tp>
inline
1463void Mat_<_Tp>::create(
int _rows,
int _cols)
1465 Mat::create(_rows, _cols, traits::Type<_Tp>::value);
1468template<
typename _Tp>
inline
1469void Mat_<_Tp>::create(Size _sz)
1471 Mat::create(_sz, traits::Type<_Tp>::value);
1474template<
typename _Tp>
inline
1475void Mat_<_Tp>::create(
int _dims,
const int* _sz)
1477 Mat::create(_dims, _sz, traits::Type<_Tp>::value);
1480template<
typename _Tp>
inline
1481void Mat_<_Tp>::release()
1484 flags = (
flags & ~CV_MAT_TYPE_MASK) + traits::Type<_Tp>::value;
1487template<
typename _Tp>
inline
1488Mat_<_Tp> Mat_<_Tp>::cross(
const Mat_& m)
const
1490 return Mat_<_Tp>(Mat::cross(m));
1493template<
typename _Tp>
template<
typename T2>
inline
1494Mat_<_Tp>::operator Mat_<T2>()
const
1496 return Mat_<T2>(
static_cast<const Mat&
>(*
this));
1499template<
typename _Tp>
inline
1500Mat_<_Tp> Mat_<_Tp>::row(
int y)
const
1502 return Mat_(*
this, Range(
y,
y+1), Range::all());
1505template<
typename _Tp>
inline
1506Mat_<_Tp> Mat_<_Tp>::col(
int x)
const
1508 return Mat_(*
this, Range::all(), Range(
x,
x+1));
1511template<
typename _Tp>
inline
1512Mat_<_Tp> Mat_<_Tp>::diag(
int d)
const
1514 return Mat_(Mat::diag(d));
1517template<
typename _Tp>
inline
1518Mat_<_Tp> Mat_<_Tp>::clone()
const
1520 return Mat_(Mat::clone());
1523template<
typename _Tp>
inline
1524size_t Mat_<_Tp>::elemSize()
const
1530template<
typename _Tp>
inline
1531size_t Mat_<_Tp>::elemSize1()
const
1533 CV_DbgAssert( Mat::elemSize1() ==
sizeof(_Tp) / DataType<_Tp>::channels );
1534 return sizeof(_Tp) / DataType<_Tp>::channels;
1537template<
typename _Tp>
inline
1538int Mat_<_Tp>::type()
const
1540 CV_DbgAssert( Mat::type() == traits::Type<_Tp>::value );
1541 return traits::Type<_Tp>::value;
1544template<
typename _Tp>
inline
1545int Mat_<_Tp>::depth()
const
1547 CV_DbgAssert( Mat::depth() == traits::Depth<_Tp>::value );
1548 return traits::Depth<_Tp>::value;
1551template<
typename _Tp>
inline
1552int Mat_<_Tp>::channels()
const
1554 CV_DbgAssert( Mat::channels() == DataType<_Tp>::channels );
1555 return DataType<_Tp>::channels;
1558template<
typename _Tp>
inline
1559size_t Mat_<_Tp>::stepT(
int i)
const
1561 return step.p[i] / elemSize();
1564template<
typename _Tp>
inline
1565size_t Mat_<_Tp>::step1(
int i)
const
1567 return step.p[i] / elemSize1();
1570template<
typename _Tp>
inline
1571Mat_<_Tp>& Mat_<_Tp>::adjustROI(
int dtop,
int dbottom,
int dleft,
int dright )
1573 return (Mat_<_Tp>&)(Mat::adjustROI(dtop, dbottom, dleft, dright));
1576template<
typename _Tp>
inline
1577Mat_<_Tp> Mat_<_Tp>::operator()(
const Range& _rowRange,
const Range& _colRange )
const
1579 return Mat_<_Tp>(*
this, _rowRange, _colRange);
1582template<
typename _Tp>
inline
1583Mat_<_Tp> Mat_<_Tp>::operator()(
const Rect& roi )
const
1585 return Mat_<_Tp>(*
this, roi);
1588template<
typename _Tp>
inline
1589Mat_<_Tp> Mat_<_Tp>::operator()(
const Range*
ranges )
const
1591 return Mat_<_Tp>(*
this,
ranges);
1594template<
typename _Tp>
inline
1597 return Mat_<_Tp>(*
this,
ranges);
1600template<
typename _Tp>
inline
1601_Tp* Mat_<_Tp>::operator [](
int y)
1607template<
typename _Tp>
inline
1608const _Tp* Mat_<_Tp>::operator [](
int y)
const
1611 return (
const _Tp*)(
data +
y*
step.p[0]);
1614template<
typename _Tp>
inline
1615_Tp& Mat_<_Tp>::operator ()(
int i0,
int i1)
1622 return ((_Tp*)(
data +
step.p[0] * i0))[i1];
1625template<
typename _Tp>
inline
1626const _Tp& Mat_<_Tp>::operator ()(
int i0,
int i1)
const
1633 return ((
const _Tp*)(
data +
step.p[0] * i0))[i1];
1636template<
typename _Tp>
inline
1637_Tp& Mat_<_Tp>::operator ()(Point
pt)
1647template<
typename _Tp>
inline
1648const _Tp& Mat_<_Tp>::operator ()(Point
pt)
const
1658template<
typename _Tp>
inline
1659_Tp& Mat_<_Tp>::operator ()(
const int*
idx)
1661 return Mat::at<_Tp>(
idx);
1664template<
typename _Tp>
inline
1665const _Tp& Mat_<_Tp>::operator ()(
const int*
idx)
const
1667 return Mat::at<_Tp>(
idx);
1670template<
typename _Tp>
template<
int n>
inline
1671_Tp& Mat_<_Tp>::operator ()(
const Vec<int, n>&
idx)
1673 return Mat::at<_Tp>(
idx);
1676template<
typename _Tp>
template<
int n>
inline
1677const _Tp& Mat_<_Tp>::operator ()(
const Vec<int, n>&
idx)
const
1679 return Mat::at<_Tp>(
idx);
1682template<
typename _Tp>
inline
1683_Tp& Mat_<_Tp>::operator ()(
int i0)
1685 return this->at<_Tp>(i0);
1688template<
typename _Tp>
inline
1689const _Tp& Mat_<_Tp>::operator ()(
int i0)
const
1691 return this->at<_Tp>(i0);
1694template<
typename _Tp>
inline
1695_Tp& Mat_<_Tp>::operator ()(
int i0,
int i1,
int i2)
1697 return this->at<_Tp>(i0, i1, i2);
1700template<
typename _Tp>
inline
1701const _Tp& Mat_<_Tp>::operator ()(
int i0,
int i1,
int i2)
const
1703 return this->at<_Tp>(i0, i1, i2);
1706template<
typename _Tp>
inline
1714template<
typename _Tp>
template<std::
size_t _Nm>
inline
1722template<
typename _Tp>
template<
int n>
inline
1723Mat_<_Tp>::operator Vec<typename DataType<_Tp>::channel_type, n>()
const
1725 CV_Assert(n % DataType<_Tp>::channels == 0);
1728 const Mat* pMat = (
const Mat*)
this;
1729 return pMat->operator Vec<typename DataType<_Tp>::channel_type, n>();
1731 return this->Mat::operator Vec<typename DataType<_Tp>::channel_type, n>();
1735template<
typename _Tp>
template<
int m,
int n>
inline
1736Mat_<_Tp>::operator Matx<typename DataType<_Tp>::channel_type, m, n>()
const
1738 CV_Assert(n % DataType<_Tp>::channels == 0);
1741 const Mat* pMat = (
const Mat*)
this;
1742 Matx<typename DataType<_Tp>::channel_type, m, n> res = pMat->operator Matx<typename DataType<_Tp>::channel_type, m, n>();
1745 Matx<typename DataType<_Tp>::channel_type, m, n> res = this->Mat::operator Matx<typename DataType<_Tp>::channel_type, m, n>();
1750template<
typename _Tp>
inline
1751MatConstIterator_<_Tp> Mat_<_Tp>::begin()
const
1753 return Mat::begin<_Tp>();
1756template<
typename _Tp>
inline
1759 return Mat::rbegin<_Tp>();
1762template<
typename _Tp>
inline
1763MatConstIterator_<_Tp> Mat_<_Tp>::end()
const
1765 return Mat::end<_Tp>();
1768template<
typename _Tp>
inline
1771 return Mat::rend<_Tp>();
1774template<
typename _Tp>
inline
1775MatIterator_<_Tp> Mat_<_Tp>::begin()
1777 return Mat::begin<_Tp>();
1780template<
typename _Tp>
inline
1783 return Mat::rbegin<_Tp>();
1786template<
typename _Tp>
inline
1787MatIterator_<_Tp> Mat_<_Tp>::end()
1789 return Mat::end<_Tp>();
1792template<
typename _Tp>
inline
1795 return Mat::rend<_Tp>();
1798template<
typename _Tp>
template<
typename Functor>
inline
1799void Mat_<_Tp>::forEach(
const Functor&
operation) {
1803template<
typename _Tp>
template<
typename Functor>
inline
1804void Mat_<_Tp>::forEach(
const Functor&
operation)
const {
1808template<
typename _Tp>
inline
1809Mat_<_Tp>::Mat_(Mat_&& m)
1814template<
typename _Tp>
inline
1815Mat_<_Tp>& Mat_<_Tp>::operator = (Mat_&& m)
1821template<
typename _Tp>
inline
1822Mat_<_Tp>::Mat_(Mat&& m)
1825 flags = (
flags & ~CV_MAT_TYPE_MASK) + traits::Type<_Tp>::value;
1829template<
typename _Tp>
inline
1830Mat_<_Tp>& Mat_<_Tp>::operator = (Mat&& m)
1837 if( traits::Type<_Tp>::value == m.type() )
1839 Mat::operator = ((Mat&&)m);
1842 if( traits::Depth<_Tp>::value == m.depth() )
1844 Mat::operator = ((Mat&&)m.reshape(DataType<_Tp>::channels, m.dims, 0));
1848 m.convertTo(*
this,
type());
1852template<
typename _Tp>
inline
1853Mat_<_Tp>::Mat_(MatExpr&& e)
1856 flags = (
flags & ~CV_MAT_TYPE_MASK) + traits::Type<_Tp>::value;
1864SparseMat SparseMat::clone()
const
1872size_t SparseMat::elemSize()
const
1878size_t SparseMat::elemSize1()
const
1884int SparseMat::type()
const
1890int SparseMat::depth()
const
1896int SparseMat::channels()
const
1902const int* SparseMat::size()
const
1904 return hdr ? hdr->size : 0;
1908int SparseMat::size(
int i)
const
1913 return hdr->size[i];
1919int SparseMat::dims()
const
1921 return hdr ? hdr->dims : 0;
1925size_t SparseMat::nzcount()
const
1927 return hdr ? hdr->nodeCount : 0;
1930template<
typename _Tp>
inline
1931_Tp& SparseMat::ref(
int i0,
size_t* hashval)
1933 return *(_Tp*)((SparseMat*)
this)->ptr(i0,
true, hashval);
1936template<
typename _Tp>
inline
1937_Tp& SparseMat::ref(
int i0,
int i1,
size_t* hashval)
1939 return *(_Tp*)((SparseMat*)
this)->ptr(i0, i1,
true, hashval);
1942template<
typename _Tp>
inline
1943_Tp& SparseMat::ref(
int i0,
int i1,
int i2,
size_t* hashval)
1945 return *(_Tp*)((SparseMat*)
this)->ptr(i0, i1, i2,
true, hashval);
1948template<
typename _Tp>
inline
1949_Tp& SparseMat::ref(
const int*
idx,
size_t* hashval)
1951 return *(_Tp*)((SparseMat*)
this)->ptr(
idx,
true, hashval);
1954template<
typename _Tp>
inline
1955_Tp SparseMat::value(
int i0,
size_t* hashval)
const
1957 const _Tp* p = (
const _Tp*)((SparseMat*)
this)->ptr(i0,
false, hashval);
1958 return p ? *p : _Tp();
1961template<
typename _Tp>
inline
1962_Tp SparseMat::value(
int i0,
int i1,
size_t* hashval)
const
1964 const _Tp* p = (
const _Tp*)((SparseMat*)
this)->ptr(i0, i1,
false, hashval);
1965 return p ? *p : _Tp();
1968template<
typename _Tp>
inline
1969_Tp SparseMat::value(
int i0,
int i1,
int i2,
size_t* hashval)
const
1971 const _Tp* p = (
const _Tp*)((SparseMat*)
this)->ptr(i0, i1, i2,
false, hashval);
1972 return p ? *p : _Tp();
1975template<
typename _Tp>
inline
1976_Tp SparseMat::value(
const int*
idx,
size_t* hashval)
const
1978 const _Tp* p = (
const _Tp*)((SparseMat*)
this)->ptr(
idx,
false, hashval);
1979 return p ? *p : _Tp();
1982template<
typename _Tp>
inline
1983const _Tp* SparseMat::find(
int i0,
size_t* hashval)
const
1985 return (
const _Tp*)((SparseMat*)
this)->ptr(i0,
false, hashval);
1988template<
typename _Tp>
inline
1989const _Tp* SparseMat::find(
int i0,
int i1,
size_t* hashval)
const
1991 return (
const _Tp*)((SparseMat*)
this)->ptr(i0, i1,
false, hashval);
1994template<
typename _Tp>
inline
1995const _Tp* SparseMat::find(
int i0,
int i1,
int i2,
size_t* hashval)
const
1997 return (
const _Tp*)((SparseMat*)
this)->ptr(i0, i1, i2,
false, hashval);
2000template<
typename _Tp>
inline
2001const _Tp* SparseMat::find(
const int*
idx,
size_t* hashval)
const
2003 return (
const _Tp*)((SparseMat*)
this)->ptr(
idx,
false, hashval);
2006template<
typename _Tp>
inline
2007_Tp& SparseMat::value(Node* n)
2009 return *(_Tp*)((
uchar*)n + hdr->valueOffset);
2012template<
typename _Tp>
inline
2013const _Tp& SparseMat::value(
const Node* n)
const
2015 return *(
const _Tp*)((
const uchar*)n + hdr->valueOffset);
2019SparseMat::Node* SparseMat::node(
size_t nidx)
2021 return (Node*)(
void*)&hdr->pool[nidx];
2025const SparseMat::Node* SparseMat::node(
size_t nidx)
const
2027 return (
const Node*)(
const void*)&hdr->pool[nidx];
2031SparseMatIterator SparseMat::begin()
2033 return SparseMatIterator(
this);
2037SparseMatConstIterator SparseMat::begin()
const
2039 return SparseMatConstIterator(
this);
2043SparseMatIterator SparseMat::end()
2045 SparseMatIterator it(
this);
2051SparseMatConstIterator SparseMat::end()
const
2053 SparseMatConstIterator it(
this);
2058template<
typename _Tp>
inline
2059SparseMatIterator_<_Tp> SparseMat::begin()
2061 return SparseMatIterator_<_Tp>(
this);
2064template<
typename _Tp>
inline
2065SparseMatConstIterator_<_Tp> SparseMat::begin()
const
2067 return SparseMatConstIterator_<_Tp>(
this);
2070template<
typename _Tp>
inline
2071SparseMatIterator_<_Tp> SparseMat::end()
2073 SparseMatIterator_<_Tp> it(
this);
2078template<
typename _Tp>
inline
2079SparseMatConstIterator_<_Tp> SparseMat::end()
const
2081 SparseMatConstIterator_<_Tp> it(
this);
2090template<
typename _Tp>
inline
2091SparseMat_<_Tp>::SparseMat_()
2093 flags = MAGIC_VAL + traits::Type<_Tp>::value;
2096template<
typename _Tp>
inline
2097SparseMat_<_Tp>::SparseMat_(
int _dims,
const int* _sizes)
2098 : SparseMat(_dims, _sizes, traits::Type<_Tp>::
value)
2101template<
typename _Tp>
inline
2102SparseMat_<_Tp>::SparseMat_(
const SparseMat& m)
2104 if( m.type() == traits::Type<_Tp>::value )
2105 *
this = (
const SparseMat_<_Tp>&)m;
2107 m.convertTo(*
this, traits::Type<_Tp>::value);
2110template<
typename _Tp>
inline
2111SparseMat_<_Tp>::SparseMat_(
const SparseMat_<_Tp>& m)
2113 this->
flags = m.flags;
2116 CV_XADD(&this->hdr->refcount, 1);
2119template<
typename _Tp>
inline
2120SparseMat_<_Tp>::SparseMat_(
const Mat& m)
2126template<
typename _Tp>
inline
2127SparseMat_<_Tp>& SparseMat_<_Tp>::operator = (
const SparseMat_<_Tp>& m)
2131 if( m.hdr ) CV_XADD(&m.hdr->refcount, 1);
2139template<
typename _Tp>
inline
2140SparseMat_<_Tp>& SparseMat_<_Tp>::operator = (
const SparseMat& m)
2142 if( m.type() == traits::Type<_Tp>::value )
2143 return (*
this = (
const SparseMat_<_Tp>&)m);
2144 m.convertTo(*
this, traits::Type<_Tp>::value);
2148template<
typename _Tp>
inline
2149SparseMat_<_Tp>& SparseMat_<_Tp>::operator = (
const Mat& m)
2151 return (*
this = SparseMat(m));
2154template<
typename _Tp>
inline
2155SparseMat_<_Tp> SparseMat_<_Tp>::clone()
const
2162template<
typename _Tp>
inline
2163void SparseMat_<_Tp>::create(
int _dims,
const int* _sizes)
2165 SparseMat::create(_dims, _sizes, traits::Type<_Tp>::value);
2168template<
typename _Tp>
inline
2169int SparseMat_<_Tp>::type()
const
2171 return traits::Type<_Tp>::value;
2174template<
typename _Tp>
inline
2175int SparseMat_<_Tp>::depth()
const
2177 return traits::Depth<_Tp>::value;
2180template<
typename _Tp>
inline
2181int SparseMat_<_Tp>::channels()
const
2183 return DataType<_Tp>::channels;
2186template<
typename _Tp>
inline
2187_Tp& SparseMat_<_Tp>::ref(
int i0,
size_t* hashval)
2189 return SparseMat::ref<_Tp>(i0, hashval);
2192template<
typename _Tp>
inline
2193_Tp SparseMat_<_Tp>::operator()(
int i0,
size_t* hashval)
const
2195 return SparseMat::value<_Tp>(i0, hashval);
2198template<
typename _Tp>
inline
2199_Tp& SparseMat_<_Tp>::ref(
int i0,
int i1,
size_t* hashval)
2201 return SparseMat::ref<_Tp>(i0, i1, hashval);
2204template<
typename _Tp>
inline
2205_Tp SparseMat_<_Tp>::operator()(
int i0,
int i1,
size_t* hashval)
const
2207 return SparseMat::value<_Tp>(i0, i1, hashval);
2210template<
typename _Tp>
inline
2211_Tp& SparseMat_<_Tp>::ref(
int i0,
int i1,
int i2,
size_t* hashval)
2213 return SparseMat::ref<_Tp>(i0, i1, i2, hashval);
2216template<
typename _Tp>
inline
2217_Tp SparseMat_<_Tp>::operator()(
int i0,
int i1,
int i2,
size_t* hashval)
const
2219 return SparseMat::value<_Tp>(i0, i1, i2, hashval);
2222template<
typename _Tp>
inline
2223_Tp& SparseMat_<_Tp>::ref(
const int*
idx,
size_t* hashval)
2225 return SparseMat::ref<_Tp>(
idx, hashval);
2228template<
typename _Tp>
inline
2229_Tp SparseMat_<_Tp>::operator()(
const int*
idx,
size_t* hashval)
const
2231 return SparseMat::value<_Tp>(
idx, hashval);
2234template<
typename _Tp>
inline
2235SparseMatIterator_<_Tp> SparseMat_<_Tp>::begin()
2237 return SparseMatIterator_<_Tp>(
this);
2240template<
typename _Tp>
inline
2241SparseMatConstIterator_<_Tp> SparseMat_<_Tp>::begin()
const
2243 return SparseMatConstIterator_<_Tp>(
this);
2246template<
typename _Tp>
inline
2247SparseMatIterator_<_Tp> SparseMat_<_Tp>::end()
2249 SparseMatIterator_<_Tp> it(
this);
2254template<
typename _Tp>
inline
2255SparseMatConstIterator_<_Tp> SparseMat_<_Tp>::end()
const
2257 SparseMatConstIterator_<_Tp> it(
this);
2267MatConstIterator::MatConstIterator()
2268 : m(0), elemSize(0), ptr(0), sliceStart(0), sliceEnd(0)
2272MatConstIterator::MatConstIterator(
const Mat* _m)
2273 : m(_m), elemSize(_m->elemSize()), ptr(0), sliceStart(0), sliceEnd(0)
2275 if( m && m->isContinuous() )
2278 sliceStart = m->ptr();
2279 sliceEnd = sliceStart + m->total()*elemSize;
2281 seek((
const int*)0);
2285MatConstIterator::MatConstIterator(
const Mat* _m,
int _row,
int _col)
2286 : m(_m), elemSize(_m->elemSize()), ptr(0), sliceStart(0), sliceEnd(0)
2289 if( m->isContinuous() )
2292 sliceStart = m->ptr();
2293 sliceEnd = sliceStart + m->total()*elemSize;
2295 int idx[] = {_row, _col};
2300MatConstIterator::MatConstIterator(
const Mat* _m, Point _pt)
2301 : m(_m), elemSize(_m->elemSize()), ptr(0), sliceStart(0), sliceEnd(0)
2304 if( m->isContinuous() )
2307 sliceStart = m->ptr();
2308 sliceEnd = sliceStart + m->total()*elemSize;
2310 int idx[] = {_pt.y, _pt.x};
2315MatConstIterator::MatConstIterator(
const MatConstIterator& it)
2316 : m(it.m), elemSize(it.elemSize), ptr(it.ptr), sliceStart(it.sliceStart), sliceEnd(it.sliceEnd)
2320MatConstIterator& MatConstIterator::operator = (
const MatConstIterator& it )
2322 m = it.m; elemSize = it.elemSize; ptr = it.ptr;
2323 sliceStart = it.sliceStart; sliceEnd = it.sliceEnd;
2328const uchar* MatConstIterator::operator *()
const
2333inline MatConstIterator& MatConstIterator::operator += (ptrdiff_t ofs)
2335 if( !m || ofs == 0 )
2337 ptrdiff_t ofsb = ofs*elemSize;
2339 if( ptr < sliceStart || sliceEnd <= ptr )
2348MatConstIterator& MatConstIterator::operator -= (ptrdiff_t ofs)
2350 return (*
this += -ofs);
2354MatConstIterator& MatConstIterator::operator --()
2356 if( m && (ptr -= elemSize) < sliceStart )
2365MatConstIterator MatConstIterator::operator --(
int)
2367 MatConstIterator b = *
this;
2373MatConstIterator& MatConstIterator::operator ++()
2375 if( m && (ptr += elemSize) >= sliceEnd )
2383inline MatConstIterator MatConstIterator::operator ++(
int)
2385 MatConstIterator b = *
this;
2392bool operator == (
const MatConstIterator& a,
const MatConstIterator& b)
2394 return a.m == b.m && a.ptr == b.ptr;
2398bool operator != (
const MatConstIterator& a,
const MatConstIterator& b)
2404bool operator < (
const MatConstIterator& a,
const MatConstIterator& b)
2406 return a.ptr < b.ptr;
2410bool operator > (
const MatConstIterator& a,
const MatConstIterator& b)
2412 return a.ptr > b.ptr;
2416bool operator <= (
const MatConstIterator& a,
const MatConstIterator& b)
2418 return a.ptr <= b.ptr;
2422bool operator >= (
const MatConstIterator& a,
const MatConstIterator& b)
2424 return a.ptr >= b.ptr;
2428ptrdiff_t operator - (
const MatConstIterator& b,
const MatConstIterator& a)
2431 return ((
size_t)(-1) >> 1);
2432 if( a.sliceEnd == b.sliceEnd )
2433 return (b.ptr - a.ptr)/
static_cast<ptrdiff_t
>(b.elemSize);
2435 return b.lpos() - a.lpos();
2439MatConstIterator operator + (
const MatConstIterator& a, ptrdiff_t ofs)
2441 MatConstIterator b = a;
2446MatConstIterator operator + (ptrdiff_t ofs,
const MatConstIterator& a)
2448 MatConstIterator b = a;
2453MatConstIterator operator - (
const MatConstIterator& a, ptrdiff_t ofs)
2455 MatConstIterator b = a;
2461const uchar* MatConstIterator::operator [](ptrdiff_t i)
const
2463 return *(*
this + i);
2470template<
typename _Tp>
inline
2471MatConstIterator_<_Tp>::MatConstIterator_()
2474template<
typename _Tp>
inline
2475MatConstIterator_<_Tp>::MatConstIterator_(
const Mat_<_Tp>* _m)
2476 : MatConstIterator(_m)
2479template<
typename _Tp>
inline
2480MatConstIterator_<_Tp>::MatConstIterator_(
const Mat_<_Tp>* _m,
int _row,
int _col)
2481 : MatConstIterator(_m, _row, _col)
2484template<
typename _Tp>
inline
2485MatConstIterator_<_Tp>::MatConstIterator_(
const Mat_<_Tp>* _m, Point _pt)
2486 : MatConstIterator(_m, _pt)
2489template<
typename _Tp>
inline
2490MatConstIterator_<_Tp>::MatConstIterator_(
const MatConstIterator_& it)
2491 : MatConstIterator(it)
2494template<
typename _Tp>
inline
2495MatConstIterator_<_Tp>& MatConstIterator_<_Tp>::operator = (
const MatConstIterator_& it )
2497 MatConstIterator::operator = (it);
2501template<
typename _Tp>
inline
2502const _Tp& MatConstIterator_<_Tp>::operator *()
const
2504 return *(_Tp*)(this->ptr);
2507template<
typename _Tp>
inline
2508MatConstIterator_<_Tp>& MatConstIterator_<_Tp>::operator += (ptrdiff_t ofs)
2510 MatConstIterator::operator += (ofs);
2514template<
typename _Tp>
inline
2515MatConstIterator_<_Tp>& MatConstIterator_<_Tp>::operator -= (ptrdiff_t ofs)
2517 return (*
this += -ofs);
2520template<
typename _Tp>
inline
2521MatConstIterator_<_Tp>& MatConstIterator_<_Tp>::operator --()
2523 MatConstIterator::operator --();
2527template<
typename _Tp>
inline
2528MatConstIterator_<_Tp> MatConstIterator_<_Tp>::operator --(
int)
2530 MatConstIterator_ b = *
this;
2531 MatConstIterator::operator --();
2535template<
typename _Tp>
inline
2536MatConstIterator_<_Tp>& MatConstIterator_<_Tp>::operator ++()
2538 MatConstIterator::operator ++();
2542template<
typename _Tp>
inline
2543MatConstIterator_<_Tp> MatConstIterator_<_Tp>::operator ++(
int)
2545 MatConstIterator_ b = *
this;
2546 MatConstIterator::operator ++();
2551template<
typename _Tp>
inline
2552Point MatConstIterator_<_Tp>::pos()
const
2557 if( m->isContinuous() )
2559 ptrdiff_t ofs = (
const _Tp*)ptr - (
const _Tp*)m->data;
2560 int y = (int)(ofs / m->cols);
2561 int x = (int)(ofs - (ptrdiff_t)
y * m->cols);
2566 ptrdiff_t ofs = (
uchar*)ptr - m->data;
2567 int y = (int)(ofs / m->step);
2568 int x = (int)((ofs -
y * m->step)/
sizeof(_Tp));
2574template<
typename _Tp>
static inline
2575bool operator == (
const MatConstIterator_<_Tp>& a,
const MatConstIterator_<_Tp>& b)
2577 return a.m == b.m && a.ptr == b.ptr;
2580template<
typename _Tp>
static inline
2581bool operator != (
const MatConstIterator_<_Tp>& a,
const MatConstIterator_<_Tp>& b)
2583 return a.m != b.m || a.ptr != b.ptr;
2586template<
typename _Tp>
static inline
2587MatConstIterator_<_Tp> operator + (
const MatConstIterator_<_Tp>& a, ptrdiff_t ofs)
2589 MatConstIterator t = (
const MatConstIterator&)a + ofs;
2590 return (MatConstIterator_<_Tp>&)t;
2593template<
typename _Tp>
static inline
2594MatConstIterator_<_Tp> operator + (ptrdiff_t ofs,
const MatConstIterator_<_Tp>& a)
2596 MatConstIterator t = (
const MatConstIterator&)a + ofs;
2597 return (MatConstIterator_<_Tp>&)t;
2600template<
typename _Tp>
static inline
2601MatConstIterator_<_Tp> operator - (
const MatConstIterator_<_Tp>& a, ptrdiff_t ofs)
2603 MatConstIterator t = (
const MatConstIterator&)a - ofs;
2604 return (MatConstIterator_<_Tp>&)t;
2607template<
typename _Tp>
inline
2608const _Tp& MatConstIterator_<_Tp>::operator [](ptrdiff_t i)
const
2610 return *(_Tp*)MatConstIterator::operator [](i);
2617template<
typename _Tp>
inline
2618MatIterator_<_Tp>::MatIterator_()
2619 : MatConstIterator_<_Tp>()
2622template<
typename _Tp>
inline
2623MatIterator_<_Tp>::MatIterator_(Mat_<_Tp>* _m)
2624 : MatConstIterator_<_Tp>(_m)
2627template<
typename _Tp>
inline
2628MatIterator_<_Tp>::MatIterator_(Mat_<_Tp>* _m,
int _row,
int _col)
2629 : MatConstIterator_<_Tp>(_m, _row, _col)
2632template<
typename _Tp>
inline
2633MatIterator_<_Tp>::MatIterator_(Mat_<_Tp>* _m, Point _pt)
2634 : MatConstIterator_<_Tp>(_m, _pt)
2637template<
typename _Tp>
inline
2638MatIterator_<_Tp>::MatIterator_(Mat_<_Tp>* _m,
const int* _idx)
2639 : MatConstIterator_<_Tp>(_m, _idx)
2642template<
typename _Tp>
inline
2643MatIterator_<_Tp>::MatIterator_(
const MatIterator_& it)
2644 : MatConstIterator_<_Tp>(it)
2647template<
typename _Tp>
inline
2648MatIterator_<_Tp>& MatIterator_<_Tp>::operator = (
const MatIterator_<_Tp>& it )
2650 MatConstIterator::operator = (it);
2654template<
typename _Tp>
inline
2655_Tp& MatIterator_<_Tp>::operator *()
const
2657 return *(_Tp*)(this->ptr);
2660template<
typename _Tp>
inline
2661MatIterator_<_Tp>& MatIterator_<_Tp>::operator += (ptrdiff_t ofs)
2663 MatConstIterator::operator += (ofs);
2667template<
typename _Tp>
inline
2668MatIterator_<_Tp>& MatIterator_<_Tp>::operator -= (ptrdiff_t ofs)
2670 MatConstIterator::operator += (-ofs);
2674template<
typename _Tp>
inline
2675MatIterator_<_Tp>& MatIterator_<_Tp>::operator --()
2677 MatConstIterator::operator --();
2681template<
typename _Tp>
inline
2682MatIterator_<_Tp> MatIterator_<_Tp>::operator --(
int)
2684 MatIterator_ b = *
this;
2685 MatConstIterator::operator --();
2689template<
typename _Tp>
inline
2690MatIterator_<_Tp>& MatIterator_<_Tp>::operator ++()
2692 MatConstIterator::operator ++();
2696template<
typename _Tp>
inline
2697MatIterator_<_Tp> MatIterator_<_Tp>::operator ++(
int)
2699 MatIterator_ b = *
this;
2700 MatConstIterator::operator ++();
2704template<
typename _Tp>
inline
2705_Tp& MatIterator_<_Tp>::operator [](ptrdiff_t i)
const
2707 return *(*
this + i);
2711template<
typename _Tp>
static inline
2712bool operator == (
const MatIterator_<_Tp>& a,
const MatIterator_<_Tp>& b)
2714 return a.m == b.m && a.ptr == b.ptr;
2717template<
typename _Tp>
static inline
2718bool operator != (
const MatIterator_<_Tp>& a,
const MatIterator_<_Tp>& b)
2720 return a.m != b.m || a.ptr != b.ptr;
2723template<
typename _Tp>
static inline
2724MatIterator_<_Tp> operator + (
const MatIterator_<_Tp>& a, ptrdiff_t ofs)
2726 MatConstIterator t = (
const MatConstIterator&)a + ofs;
2727 return (MatIterator_<_Tp>&)t;
2730template<
typename _Tp>
static inline
2731MatIterator_<_Tp> operator + (ptrdiff_t ofs,
const MatIterator_<_Tp>& a)
2733 MatConstIterator t = (
const MatConstIterator&)a + ofs;
2734 return (MatIterator_<_Tp>&)t;
2737template<
typename _Tp>
static inline
2738MatIterator_<_Tp> operator - (
const MatIterator_<_Tp>& a, ptrdiff_t ofs)
2740 MatConstIterator t = (
const MatConstIterator&)a - ofs;
2741 return (MatIterator_<_Tp>&)t;
2749SparseMatConstIterator::SparseMatConstIterator()
2750 : m(0), hashidx(0), ptr(0)
2754SparseMatConstIterator::SparseMatConstIterator(
const SparseMatConstIterator& it)
2755 : m(it.m), hashidx(it.hashidx), ptr(it.ptr)
2758inline SparseMatConstIterator& SparseMatConstIterator::operator = (
const SparseMatConstIterator& it)
2763 hashidx = it.hashidx;
2769template<
typename _Tp>
inline
2770const _Tp& SparseMatConstIterator::value()
const
2772 return *(
const _Tp*)ptr;
2776const SparseMat::Node* SparseMatConstIterator::node()
const
2778 return (ptr && m && m->hdr) ? (
const SparseMat::Node*)(
const void*)(ptr - m->hdr->valueOffset) : 0;
2782SparseMatConstIterator SparseMatConstIterator::operator ++(
int)
2784 SparseMatConstIterator it = *
this;
2790void SparseMatConstIterator::seekEnd()
2794 hashidx = m->hdr->hashtab.size();
2801bool operator == (
const SparseMatConstIterator& it1,
const SparseMatConstIterator& it2)
2803 return it1.m == it2.m && it1.ptr == it2.ptr;
2807bool operator != (
const SparseMatConstIterator& it1,
const SparseMatConstIterator& it2)
2809 return !(it1 == it2);
2817SparseMatIterator::SparseMatIterator()
2821SparseMatIterator::SparseMatIterator(SparseMat* _m)
2822 : SparseMatConstIterator(_m)
2826SparseMatIterator::SparseMatIterator(
const SparseMatIterator& it)
2827 : SparseMatConstIterator(it)
2831SparseMatIterator& SparseMatIterator::operator = (
const SparseMatIterator& it)
2833 (SparseMatConstIterator&)*
this = it;
2837template<
typename _Tp>
inline
2838_Tp& SparseMatIterator::value()
const
2844SparseMat::Node* SparseMatIterator::node()
const
2846 return (SparseMat::Node*)SparseMatConstIterator::node();
2850SparseMatIterator& SparseMatIterator::operator ++()
2852 SparseMatConstIterator::operator ++();
2857SparseMatIterator SparseMatIterator::operator ++(
int)
2859 SparseMatIterator it = *
this;
2868template<
typename _Tp>
inline
2869SparseMatConstIterator_<_Tp>::SparseMatConstIterator_()
2872template<
typename _Tp>
inline
2873SparseMatConstIterator_<_Tp>::SparseMatConstIterator_(
const SparseMat_<_Tp>* _m)
2874 : SparseMatConstIterator(_m)
2877template<
typename _Tp>
inline
2878SparseMatConstIterator_<_Tp>::SparseMatConstIterator_(
const SparseMat* _m)
2879 : SparseMatConstIterator(_m)
2881 CV_Assert( _m->type() == traits::Type<_Tp>::value );
2884template<
typename _Tp>
inline
2885SparseMatConstIterator_<_Tp>::SparseMatConstIterator_(
const SparseMatConstIterator_<_Tp>& it)
2886 : SparseMatConstIterator(it)
2889template<
typename _Tp>
inline
2890SparseMatConstIterator_<_Tp>& SparseMatConstIterator_<_Tp>::operator = (
const SparseMatConstIterator_<_Tp>& it)
2892 return reinterpret_cast<SparseMatConstIterator_<_Tp>&
>
2893 (*
reinterpret_cast<SparseMatConstIterator*
>(
this) =
2894 reinterpret_cast<const SparseMatConstIterator&
>(it));
2897template<
typename _Tp>
inline
2898const _Tp& SparseMatConstIterator_<_Tp>::operator *()
const
2900 return *(
const _Tp*)this->ptr;
2903template<
typename _Tp>
inline
2904SparseMatConstIterator_<_Tp>& SparseMatConstIterator_<_Tp>::operator ++()
2906 SparseMatConstIterator::operator ++();
2910template<
typename _Tp>
inline
2911SparseMatConstIterator_<_Tp> SparseMatConstIterator_<_Tp>::operator ++(
int)
2913 SparseMatConstIterator_<_Tp> it = *
this;
2914 SparseMatConstIterator::operator ++();
2922template<
typename _Tp>
inline
2923SparseMatIterator_<_Tp>::SparseMatIterator_()
2926template<
typename _Tp>
inline
2927SparseMatIterator_<_Tp>::SparseMatIterator_(SparseMat_<_Tp>* _m)
2928 : SparseMatConstIterator_<_Tp>(_m)
2931template<
typename _Tp>
inline
2932SparseMatIterator_<_Tp>::SparseMatIterator_(SparseMat* _m)
2933 : SparseMatConstIterator_<_Tp>(_m)
2936template<
typename _Tp>
inline
2937SparseMatIterator_<_Tp>::SparseMatIterator_(
const SparseMatIterator_<_Tp>& it)
2938 : SparseMatConstIterator_<_Tp>(it)
2941template<
typename _Tp>
inline
2942SparseMatIterator_<_Tp>& SparseMatIterator_<_Tp>::operator = (
const SparseMatIterator_<_Tp>& it)
2944 return reinterpret_cast<SparseMatIterator_<_Tp>&
>
2945 (*
reinterpret_cast<SparseMatConstIterator*
>(
this) =
2946 reinterpret_cast<const SparseMatConstIterator&
>(it));
2949template<
typename _Tp>
inline
2950_Tp& SparseMatIterator_<_Tp>::operator *()
const
2952 return *(_Tp*)this->ptr;
2955template<
typename _Tp>
inline
2956SparseMatIterator_<_Tp>& SparseMatIterator_<_Tp>::operator ++()
2958 SparseMatConstIterator::operator ++();
2962template<
typename _Tp>
inline
2963SparseMatIterator_<_Tp> SparseMatIterator_<_Tp>::operator ++(
int)
2965 SparseMatIterator_<_Tp> it = *
this;
2966 SparseMatConstIterator::operator ++();
2974template<
typename _Tp>
inline
2975MatCommaInitializer_<_Tp>::MatCommaInitializer_(Mat_<_Tp>* _m)
2979template<
typename _Tp>
template<
typename T2>
inline
2980MatCommaInitializer_<_Tp>& MatCommaInitializer_<_Tp>::operator , (T2 v)
2982 CV_DbgAssert( this->it < ((
const Mat_<_Tp>*)this->it.m)->end() );
2988template<
typename _Tp>
inline
2989MatCommaInitializer_<_Tp>::operator Mat_<_Tp>()
const
2991 CV_DbgAssert( this->it == ((
const Mat_<_Tp>*)this->it.m)->end() );
2992 return Mat_<_Tp>(*this->it.m);
2996template<
typename _Tp,
typename T2>
static inline
2997MatCommaInitializer_<_Tp> operator << (
const Mat_<_Tp>& m, T2 val)
2999 MatCommaInitializer_<_Tp> commaInitializer((Mat_<_Tp>*)&m);
3000 return (commaInitializer, val);
3008Mat& Mat::operator = (
const MatExpr& e)
3010 e.op->assign(e, *
this);
3014template<
typename _Tp>
inline
3015Mat_<_Tp>::Mat_(
const MatExpr& e)
3017 e.op->assign(e, *
this, traits::Type<_Tp>::value);
3020template<
typename _Tp>
inline
3021Mat_<_Tp>& Mat_<_Tp>::operator = (
const MatExpr& e)
3023 e.op->assign(e, *
this, traits::Type<_Tp>::value);
3027template<
typename _Tp>
inline
3028MatExpr Mat_<_Tp>::zeros(
int rows,
int cols)
3030 return Mat::zeros(
rows,
cols, traits::Type<_Tp>::value);
3033template<
typename _Tp>
inline
3034MatExpr Mat_<_Tp>::zeros(Size sz)
3036 return Mat::zeros(sz, traits::Type<_Tp>::value);
3039template<
typename _Tp>
inline
3040MatExpr Mat_<_Tp>::ones(
int rows,
int cols)
3042 return Mat::ones(
rows,
cols, traits::Type<_Tp>::value);
3045template<
typename _Tp>
inline
3046MatExpr Mat_<_Tp>::ones(Size sz)
3048 return Mat::ones(sz, traits::Type<_Tp>::value);
3051template<
typename _Tp>
inline
3052MatExpr Mat_<_Tp>::eye(
int rows,
int cols)
3054 return Mat::eye(
rows,
cols, traits::Type<_Tp>::value);
3057template<
typename _Tp>
inline
3058MatExpr Mat_<_Tp>::eye(Size sz)
3060 return Mat::eye(sz, traits::Type<_Tp>::value);
3065 : op(0),
flags(0), a(Mat()), b(Mat()), c(Mat()),
alpha(0),
beta(0), s()
3069MatExpr::MatExpr(
const MatOp* _op,
int _flags,
const Mat& _a,
const Mat& _b,
3070 const Mat& _c,
double _alpha,
double _beta,
const Scalar& _s)
3071 : op(_op),
flags(_flags), a(_a), b(_b), c(_c),
alpha(_alpha),
beta(_beta), s(_s)
3075MatExpr::operator Mat()
const
3078 op->assign(*
this, m);
3082template<
typename _Tp>
inline
3083MatExpr::operator Mat_<_Tp>()
const
3086 op->assign(*
this, m, traits::Type<_Tp>::value);
3091template<
typename _Tp>
static inline
3092MatExpr
min(
const Mat_<_Tp>& a,
const Mat_<_Tp>& b)
3094 return cv::min((
const Mat&)a, (
const Mat&)b);
3097template<
typename _Tp>
static inline
3098MatExpr
min(
const Mat_<_Tp>& a,
double s)
3100 return cv::min((
const Mat&)a, s);
3103template<
typename _Tp>
static inline
3104MatExpr
min(
double s,
const Mat_<_Tp>& a)
3106 return cv::min((
const Mat&)a, s);
3109template<
typename _Tp>
static inline
3110MatExpr
max(
const Mat_<_Tp>& a,
const Mat_<_Tp>& b)
3112 return cv::max((
const Mat&)a, (
const Mat&)b);
3115template<
typename _Tp>
static inline
3116MatExpr
max(
const Mat_<_Tp>& a,
double s)
3118 return cv::max((
const Mat&)a, s);
3121template<
typename _Tp>
static inline
3122MatExpr
max(
double s,
const Mat_<_Tp>& a)
3124 return cv::max((
const Mat&)a, s);
3127template<
typename _Tp>
static inline
3128MatExpr
abs(
const Mat_<_Tp>& m)
3130 return cv::abs((
const Mat&)m);
3135Mat& operator += (Mat& a,
const MatExpr& b)
3137 b.op->augAssignAdd(b, a);
3142const Mat& operator += (
const Mat& a,
const MatExpr& b)
3144 b.op->augAssignAdd(b, (Mat&)a);
3148template<
typename _Tp>
static inline
3149Mat_<_Tp>& operator += (Mat_<_Tp>& a,
const MatExpr& b)
3151 b.op->augAssignAdd(b, a);
3155template<
typename _Tp>
static inline
3156const Mat_<_Tp>& operator += (
const Mat_<_Tp>& a,
const MatExpr& b)
3158 b.op->augAssignAdd(b, (Mat&)a);
3163Mat& operator -= (Mat& a,
const MatExpr& b)
3165 b.op->augAssignSubtract(b, a);
3170const Mat& operator -= (
const Mat& a,
const MatExpr& b)
3172 b.op->augAssignSubtract(b, (Mat&)a);
3176template<
typename _Tp>
static inline
3177Mat_<_Tp>& operator -= (Mat_<_Tp>& a,
const MatExpr& b)
3179 b.op->augAssignSubtract(b, a);
3183template<
typename _Tp>
static inline
3184const Mat_<_Tp>& operator -= (
const Mat_<_Tp>& a,
const MatExpr& b)
3186 b.op->augAssignSubtract(b, (Mat&)a);
3191Mat& operator *= (Mat& a,
const MatExpr& b)
3193 b.op->augAssignMultiply(b, a);
3198const Mat& operator *= (
const Mat& a,
const MatExpr& b)
3200 b.op->augAssignMultiply(b, (Mat&)a);
3204template<
typename _Tp>
static inline
3205Mat_<_Tp>& operator *= (Mat_<_Tp>& a,
const MatExpr& b)
3207 b.op->augAssignMultiply(b, a);
3211template<
typename _Tp>
static inline
3212const Mat_<_Tp>& operator *= (
const Mat_<_Tp>& a,
const MatExpr& b)
3214 b.op->augAssignMultiply(b, (Mat&)a);
3219Mat& operator /= (Mat& a,
const MatExpr& b)
3221 b.op->augAssignDivide(b, a);
3226const Mat& operator /= (
const Mat& a,
const MatExpr& b)
3228 b.op->augAssignDivide(b, (Mat&)a);
3232template<
typename _Tp>
static inline
3233Mat_<_Tp>& operator /= (Mat_<_Tp>& a,
const MatExpr& b)
3235 b.op->augAssignDivide(b, a);
3239template<
typename _Tp>
static inline
3240const Mat_<_Tp>& operator /= (
const Mat_<_Tp>& a,
const MatExpr& b)
3242 b.op->augAssignDivide(b, (Mat&)a);
3249template<
typename _Tp>
inline
3259 CV_Error(Error::StsNotImplemented,
"");
3262 Mat((
int)vec.
size(), 1, traits::Type<_Tp>::value, (
uchar*)&vec[0]).copyTo(*
this);
3266UMat UMat::row(
int y)
const
3268 return UMat(*
this, Range(
y,
y + 1), Range::all());
3272UMat UMat::col(
int x)
const
3274 return UMat(*
this, Range::all(), Range(
x,
x + 1));
3278UMat UMat::rowRange(
int startrow,
int endrow)
const
3280 return UMat(*
this, Range(startrow, endrow), Range::all());
3284UMat UMat::rowRange(
const Range&
r)
const
3286 return UMat(*
this,
r, Range::all());
3290UMat UMat::colRange(
int startcol,
int endcol)
const
3292 return UMat(*
this, Range::all(), Range(startcol, endcol));
3296UMat UMat::colRange(
const Range&
r)
const
3298 return UMat(*
this, Range::all(),
r);
3302UMat UMat::operator()( Range _rowRange, Range _colRange )
const
3304 return UMat(*
this, _rowRange, _colRange);
3308UMat UMat::operator()(
const Rect& roi )
const
3310 return UMat(*
this, roi);
3314UMat UMat::operator()(
const Range*
ranges)
const
3316 return UMat(*
this,
ranges);
3322 return UMat(*
this,
ranges);
3326bool UMat::isContinuous()
const
3328 return (
flags & CONTINUOUS_FLAG) != 0;
3332bool UMat::isSubmatrix()
const
3334 return (
flags & SUBMATRIX_FLAG) != 0;
3338size_t UMat::elemSize()
const
3346size_t UMat::elemSize1()
const
3352int UMat::type()
const
3358int UMat::depth()
const
3364int UMat::channels()
const
3370size_t UMat::step1(
int i)
const
3372 return step.p[i] / elemSize1();
3376inline bool UMatData::hostCopyObsolete()
const {
return (
flags & HOST_COPY_OBSOLETE) != 0; }
3377inline bool UMatData::deviceCopyObsolete()
const {
return (
flags & DEVICE_COPY_OBSOLETE) != 0; }
3378inline bool UMatData::deviceMemMapped()
const {
return (
flags & DEVICE_MEM_MAPPED) != 0; }
3379inline bool UMatData::copyOnMap()
const {
return (
flags & COPY_ON_MAP) != 0; }
3380inline bool UMatData::tempUMat()
const {
return (
flags & TEMP_UMAT) != 0; }
3381inline bool UMatData::tempCopiedUMat()
const {
return (
flags & TEMP_COPIED_UMAT) == TEMP_COPIED_UMAT; }
3383inline void UMatData::markDeviceMemMapped(
bool flag)
3386 flags |= DEVICE_MEM_MAPPED;
3388 flags &= ~DEVICE_MEM_MAPPED;
3391inline void UMatData::markHostCopyObsolete(
bool flag)
3394 flags |= HOST_COPY_OBSOLETE;
3396 flags &= ~HOST_COPY_OBSOLETE;
3398inline void UMatData::markDeviceCopyObsolete(
bool flag)
3401 flags |= DEVICE_COPY_OBSOLETE;
3403 flags &= ~DEVICE_COPY_OBSOLETE;
3414#pragma warning( pop )
3417#ifdef CV_DISABLE_CLANG_ENUM_WARNINGS
3418#undef CV_DISABLE_CLANG_ENUM_WARNINGS
3419#pragma clang diagnostic pop
Matrix expression representation This is a list of implemented matrix operations that can be combined...
Definition mat.hpp:3586
_Tp height
the height
Definition types.hpp:363
_Tp width
the width
Definition types.hpp:362
static _OutputArray rawOut(std::vector< _Tp > &vec)
InputArrayOfArrays Size InputOutputArray InputOutputArray OutputArrayOfArrays OutputArrayOfArrays OutputArray OutputArray OutputArray int flags
Definition calib3d.hpp:1617
void CV_EXPORTS_W copyTo(InputArray src, OutputArray dst, InputArray mask)
This is an overloaded member function, provided for convenience (python) Copies the matrix to another...
CV_EXPORTS_W void max(InputArray src1, InputArray src2, OutputArray dst)
Calculates per-element maximum of two arrays or an array and a scalar.
CV_EXPORTS_W void min(InputArray src1, InputArray src2, OutputArray dst)
Calculates per-element minimum of two arrays or an array and a scalar.
static _InputOutputArray rawInOut(_Tp &v)
Point2i Point
Definition types.hpp:209
Size2i Size
Definition types.hpp:370
static _InputArray rawIn(_Tp &v)
CV__DEBUG_NS_BEGIN class CV_EXPORTS _OutputArray
Definition mat.hpp:72
Scalar_< double > Scalar
Definition types.hpp:702
static _OutputArray rawOut(_Tp &v)
@ USAGE_DEFAULT
Definition mat.hpp:465
@ ACCESS_READ
Definition mat.hpp:65
@ ACCESS_RW
Definition mat.hpp:66
@ ACCESS_WRITE
Definition mat.hpp:65
int rows
Definition core_c.h:257
int CvScalar value
Definition core_c.h:720
int int void int total
Definition core_c.h:1689
const CvArr const CvArr const CvArr CvArr int flags
Definition core_c.h:1342
int int channels
Definition core_c.h:100
const void * elem
Definition core_c.h:1715
int cols
Definition core_c.h:221
double const CvArr double beta
Definition core_c.h:1094
const int * idx
Definition core_c.h:668
CvSize size
Definition core_c.h:112
int int type
Definition core_c.h:221
void int step
Definition core_c.h:905
CvArr * arr
Definition core_c.h:1247
void * data
Definition core_c.h:427
const CvArr CvArr * x
Definition core_c.h:1195
double alpha
Definition core_c.h:1093
int dims
Definition core_c.h:464
const CvArr * y
Definition core_c.h:1187
const int * sizes
Definition core_c.h:440
#define CV_64F
Definition interface.h:79
#define CV_8U
Definition interface.h:73
#define CV_MAT_DEPTH(flags)
Definition interface.h:83
#define CV_CN_MAX
Definition interface.h:69
unsigned char uchar
Definition interface.h:51
#define CV_MAKETYPE(depth, cn)
Definition interface.h:85
softfloat abs(softfloat a)
Absolute value.
Definition softfloat.hpp:444
#define CV_MAT_CONT_FLAG
Definition cvdef.h:499
#define CV_ELEM_SIZE1(type)
Definition cvdef.h:508
#define CV_Error(code, msg)
Call the error handler.
Definition base.hpp:320
#define CV_MAT_CN(flags)
Definition cvdef.h:495
#define CV_NOEXCEPT
Definition cvdef.h:800
#define CV_MAT_TYPE(flags)
Definition cvdef.h:497
#define CV__DEBUG_NS_BEGIN
Definition cvdef.h:69
#define CV__DEBUG_NS_END
Definition cvdef.h:70
#define CV_Assert(expr)
Checks a condition at runtime and throws exception if it fails.
Definition base.hpp:342
#define CV_DbgAssert(expr)
Definition base.hpp:375
#define CV_ELEM_SIZE(type)
Definition cvdef.h:510
CvPoint2D32f pt[4]
Definition imgproc_c.h:571
CvArr CvPoint2D32f double M
Definition imgproc_c.h:270
CvRect r
Definition imgproc_c.h:984
float ** ranges
Definition imgproc_c.h:636
CvArr CvPoint offset
Definition imgproc_c.h:88
CvArr CvArr IplConvKernel int operation
Definition imgproc_c.h:330
CvArr CvArr * temp
Definition imgproc_c.h:329
"black box" representation of the file storage associated with a file on disk.
Definition calib3d.hpp:441
static uchar abs(uchar a)
Definition cvstd.hpp:66
float x
Definition types_c.h:978
float y
Definition types_c.h:979
@ value
Definition traits.hpp:386