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 )
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"
81
template<
typename
_Tp>
static
inline
84
CV_StaticAssert(
sizeof(_Tp) <= CV_CN_MAX,
"sizeof(_Tp) is too large");
85
const
int
elemSize =
sizeof(_Tp);
86
return
(
int)CV_MAKETYPE(CV_8U, elemSize);
91
inline
void
_InputArray::init(
int
_flags,
const
void* _obj)
92{ flags = _flags; obj = (
void*)_obj; }
94
inline
void
_InputArray::init(
int
_flags,
const
void* _obj, Size _sz)
95{ flags = _flags; obj = (
void*)_obj; sz = _sz; }
97
inline
void* _InputArray::getObj()
const
{
return
obj; }
98
inline
int
_InputArray::getFlags()
const
{
return
flags; }
99
inline
Size _InputArray::getSz()
const
{
return
sz; }
101
inline
_InputArray::_InputArray() { init(0 + NONE, 0); }
102
inline
_InputArray::_InputArray(
int
_flags,
void* _obj) { init(_flags, _obj); }
103
inline
_InputArray::_InputArray(
const
Mat& m) { init(MAT+ACCESS_READ, &m); }
104
inline
_InputArray::_InputArray(
const
std::vector<Mat>& vec) { init(STD_VECTOR_MAT+ACCESS_READ, &vec); }
105
inline
_InputArray::_InputArray(
const
UMat& m) { init(UMAT+ACCESS_READ, &m); }
106
inline
_InputArray::_InputArray(
const
std::vector<UMat>& vec) { init(STD_VECTOR_UMAT+ACCESS_READ, &vec); }
108
template<
typename
_Tp>
inline
109_InputArray::_InputArray(
const
std::vector<_Tp>& vec)
110{ init(FIXED_TYPE + STD_VECTOR + traits::Type<_Tp>::value + ACCESS_READ, &vec); }
112
template<
typename
_Tp, std::
size_t
_Nm>
inline
113_InputArray::_InputArray(
const
std::array<_Tp, _Nm>& arr)
114{ init(FIXED_TYPE + FIXED_SIZE + MATX + traits::Type<_Tp>::value + ACCESS_READ, arr.data(), Size(1, _Nm)); }
116
template<std::
size_t
_Nm>
inline
117_InputArray::_InputArray(
const
std::array<Mat, _Nm>& arr)
118{ init(STD_ARRAY_MAT + ACCESS_READ, arr.data(), Size(1, _Nm)); }
121_InputArray::_InputArray(
const
std::vector<bool>& vec)
122{ init(FIXED_TYPE + STD_BOOL_VECTOR + traits::Type<bool>::value + ACCESS_READ, &vec); }
124
template<
typename
_Tp>
inline
125_InputArray::_InputArray(
const
std::vector<std::vector<_Tp> >& vec)
126{ init(FIXED_TYPE + STD_VECTOR_VECTOR + traits::Type<_Tp>::value + ACCESS_READ, &vec); }
128
template<
typename
_Tp>
inline
129_InputArray::_InputArray(
const
std::vector<Mat_<_Tp> >& vec)
130{ init(FIXED_TYPE + STD_VECTOR_MAT + traits::Type<_Tp>::value + ACCESS_READ, &vec); }
132
template<
typename
_Tp,
int
m,
int
n>
inline
133_InputArray::_InputArray(
const
Matx<_Tp, m, n>& mtx)
134{ init(FIXED_TYPE + FIXED_SIZE + MATX + traits::Type<_Tp>::value + ACCESS_READ, &mtx, Size(n, m)); }
136
template<
typename
_Tp>
inline
137_InputArray::_InputArray(
const
_Tp* vec,
int
n)
138{ init(FIXED_TYPE + FIXED_SIZE + MATX + traits::Type<_Tp>::value + ACCESS_READ, vec, Size(n, 1)); }
140
template<
typename
_Tp>
inline
141_InputArray::_InputArray(
const
Mat_<_Tp>& m)
142{ init(FIXED_TYPE + MAT + traits::Type<_Tp>::value + ACCESS_READ, &m); }
144
inline
_InputArray::_InputArray(
const
double& val)
145{ init(FIXED_TYPE + FIXED_SIZE + MATX + CV_64F + ACCESS_READ, &val, Size(1,1)); }
147
inline
_InputArray::_InputArray(
const
cuda::GpuMat& d_mat)
148{ init(CUDA_GPU_MAT + ACCESS_READ, &d_mat); }
150
inline
_InputArray::_InputArray(
const
std::vector<cuda::GpuMat>& d_mat)
151{ init(STD_VECTOR_CUDA_GPU_MAT + ACCESS_READ, &d_mat);}
153
inline
_InputArray::_InputArray(
const
ogl::Buffer& buf)
154{ init(OPENGL_BUFFER + ACCESS_READ, &buf); }
156
inline
_InputArray::_InputArray(
const
cuda::HostMem& cuda_mem)
157{ init(CUDA_HOST_MEM + ACCESS_READ, &cuda_mem); }
159
template<
typename
_Tp>
inline
160_InputArray _InputArray::rawIn(
const
std::vector<_Tp>& vec)
163
v.flags = _InputArray::FIXED_TYPE + _InputArray::STD_VECTOR + rawType<_Tp>() + ACCESS_READ;
168
template<
typename
_Tp, std::
size_t
_Nm>
inline
169_InputArray _InputArray::rawIn(
const
std::array<_Tp, _Nm>& arr)
172
v.flags = FIXED_TYPE + FIXED_SIZE + MATX + traits::Type<_Tp>::value + ACCESS_READ;
173
v.obj = (
void*)arr.data();
178
inline
_InputArray::~_InputArray() {}
180
inline
Mat _InputArray::getMat(
int
i)
const
182
if( kind() == MAT && i < 0 )
183
return
*(
const
Mat*)obj;
187
inline
bool
_InputArray::isMat()
const
{
return
kind() == _InputArray::MAT; }
188
inline
bool
_InputArray::isUMat()
const
{
return
kind() == _InputArray::UMAT; }
189
inline
bool
_InputArray::isMatVector()
const
{
return
kind() == _InputArray::STD_VECTOR_MAT; }
190
inline
bool
_InputArray::isUMatVector()
const
{
return
kind() == _InputArray::STD_VECTOR_UMAT; }
191
inline
bool
_InputArray::isMatx()
const
{
return
kind() == _InputArray::MATX; }
192
inline
bool
_InputArray::isVector()
const
{
return
kind() == _InputArray::STD_VECTOR ||
193
kind() == _InputArray::STD_BOOL_VECTOR ||
194
(kind() == _InputArray::MATX && (sz.
width
<= 1 || sz.
height
<= 1)); }
195
inline
bool
_InputArray::isGpuMat()
const
{
return
kind() == _InputArray::CUDA_GPU_MAT; }
196
inline
bool
_InputArray::isGpuMatVector()
const
{
return
kind() == _InputArray::STD_VECTOR_CUDA_GPU_MAT; }
200
inline
_OutputArray::_OutputArray() { init(NONE + ACCESS_WRITE, 0); }
201
inline
_OutputArray::_OutputArray(
int
_flags,
void* _obj) { init(_flags + ACCESS_WRITE, _obj); }
202
inline
_OutputArray::_OutputArray(Mat& m) { init(MAT+ACCESS_WRITE, &m); }
203
inline
_OutputArray::_OutputArray(std::vector<Mat>& vec) { init(STD_VECTOR_MAT + ACCESS_WRITE, &vec); }
204
inline
_OutputArray::_OutputArray(UMat& m) { init(UMAT + ACCESS_WRITE, &m); }
205
inline
_OutputArray::_OutputArray(std::vector<UMat>& vec) { init(STD_VECTOR_UMAT + ACCESS_WRITE, &vec); }
207
template<
typename
_Tp>
inline
208_OutputArray::_OutputArray(std::vector<_Tp>& vec)
209{ init(FIXED_TYPE + STD_VECTOR + traits::Type<_Tp>::value + ACCESS_WRITE, &vec); }
211
template<
typename
_Tp, std::
size_t
_Nm>
inline
212_OutputArray::_OutputArray(std::array<_Tp, _Nm>& arr)
213{ init(FIXED_TYPE + FIXED_SIZE + MATX + traits::Type<_Tp>::value + ACCESS_WRITE, arr.data(), Size(1, _Nm)); }
215
template<std::
size_t
_Nm>
inline
216_OutputArray::_OutputArray(std::array<Mat, _Nm>& arr)
217{ init(STD_ARRAY_MAT + ACCESS_WRITE, arr.data(), Size(1, _Nm)); }
219
template<
typename
_Tp>
inline
220_OutputArray::_OutputArray(std::vector<std::vector<_Tp> >& vec)
221{ init(FIXED_TYPE + STD_VECTOR_VECTOR + traits::Type<_Tp>::value + ACCESS_WRITE, &vec); }
223
template<
typename
_Tp>
inline
224_OutputArray::_OutputArray(std::vector<Mat_<_Tp> >& vec)
225{ init(FIXED_TYPE + STD_VECTOR_MAT + traits::Type<_Tp>::value + ACCESS_WRITE, &vec); }
227
template<
typename
_Tp>
inline
228_OutputArray::_OutputArray(Mat_<_Tp>& m)
229{ init(FIXED_TYPE + MAT + traits::Type<_Tp>::value + ACCESS_WRITE, &m); }
231
template<
typename
_Tp,
int
m,
int
n>
inline
232_OutputArray::_OutputArray(Matx<_Tp, m, n>& mtx)
233{ init(FIXED_TYPE + FIXED_SIZE + MATX + traits::Type<_Tp>::value + ACCESS_WRITE, &mtx, Size(n, m)); }
235
template<
typename
_Tp>
inline
236_OutputArray::_OutputArray(_Tp* vec,
int
n)
237{ init(FIXED_TYPE + FIXED_SIZE + MATX + traits::Type<_Tp>::value + ACCESS_WRITE, vec, Size(n, 1)); }
239
template<
typename
_Tp>
inline
240_OutputArray::_OutputArray(
const
std::vector<_Tp>& vec)
241{ init(FIXED_TYPE + FIXED_SIZE + STD_VECTOR + traits::Type<_Tp>::value + ACCESS_WRITE, &vec); }
243
template<
typename
_Tp, std::
size_t
_Nm>
inline
244_OutputArray::_OutputArray(
const
std::array<_Tp, _Nm>& arr)
245{ init(FIXED_TYPE + FIXED_SIZE + MATX + traits::Type<_Tp>::value + ACCESS_WRITE, arr.data(), Size(1, _Nm)); }
247
template<std::
size_t
_Nm>
inline
248_OutputArray::_OutputArray(
const
std::array<Mat, _Nm>& arr)
249{ init(FIXED_SIZE + STD_ARRAY_MAT + ACCESS_WRITE, arr.data(), Size(1, _Nm)); }
251
template<
typename
_Tp>
inline
252_OutputArray::_OutputArray(
const
std::vector<std::vector<_Tp> >& vec)
253{ init(FIXED_TYPE + FIXED_SIZE + STD_VECTOR_VECTOR + traits::Type<_Tp>::value + ACCESS_WRITE, &vec); }
255
template<
typename
_Tp>
inline
256_OutputArray::_OutputArray(
const
std::vector<Mat_<_Tp> >& vec)
257{ init(FIXED_TYPE + FIXED_SIZE + STD_VECTOR_MAT + traits::Type<_Tp>::value + ACCESS_WRITE, &vec); }
259
template<
typename
_Tp>
inline
260_OutputArray::_OutputArray(
const
Mat_<_Tp>& m)
261{ init(FIXED_TYPE + FIXED_SIZE + MAT + traits::Type<_Tp>::value + ACCESS_WRITE, &m); }
263
template<
typename
_Tp,
int
m,
int
n>
inline
264_OutputArray::_OutputArray(
const
Matx<_Tp, m, n>& mtx)
265{ init(FIXED_TYPE + FIXED_SIZE + MATX + traits::Type<_Tp>::value + ACCESS_WRITE, &mtx, Size(n, m)); }
267
template<
typename
_Tp>
inline
268_OutputArray::_OutputArray(
const
_Tp* vec,
int
n)
269{ init(FIXED_TYPE + FIXED_SIZE + MATX + traits::Type<_Tp>::value + ACCESS_WRITE, vec, Size(n, 1)); }
271
inline
_OutputArray::_OutputArray(cuda::GpuMat& d_mat)
272{ init(CUDA_GPU_MAT + ACCESS_WRITE, &d_mat); }
274
inline
_OutputArray::_OutputArray(std::vector<cuda::GpuMat>& d_mat)
275{ init(STD_VECTOR_CUDA_GPU_MAT + ACCESS_WRITE, &d_mat);}
277
inline
_OutputArray::_OutputArray(ogl::Buffer& buf)
278{ init(OPENGL_BUFFER + ACCESS_WRITE, &buf); }
280
inline
_OutputArray::_OutputArray(cuda::HostMem& cuda_mem)
281{ init(CUDA_HOST_MEM + ACCESS_WRITE, &cuda_mem); }
283
inline
_OutputArray::_OutputArray(
const
Mat& m)
284{ init(FIXED_TYPE + FIXED_SIZE + MAT + ACCESS_WRITE, &m); }
286
inline
_OutputArray::_OutputArray(
const
std::vector<Mat>& vec)
287{ init(FIXED_SIZE + STD_VECTOR_MAT + ACCESS_WRITE, &vec); }
289
inline
_OutputArray::_OutputArray(
const
UMat& m)
290{ init(FIXED_TYPE + FIXED_SIZE + UMAT + ACCESS_WRITE, &m); }
292
inline
_OutputArray::_OutputArray(
const
std::vector<UMat>& vec)
293{ init(FIXED_SIZE + STD_VECTOR_UMAT + ACCESS_WRITE, &vec); }
295
inline
_OutputArray::_OutputArray(
const
cuda::GpuMat& d_mat)
296{ init(FIXED_TYPE + FIXED_SIZE + CUDA_GPU_MAT + ACCESS_WRITE, &d_mat); }
299
inline
_OutputArray::_OutputArray(
const
ogl::Buffer& buf)
300{ init(FIXED_TYPE + FIXED_SIZE + OPENGL_BUFFER + ACCESS_WRITE, &buf); }
302
inline
_OutputArray::_OutputArray(
const
cuda::HostMem& cuda_mem)
303{ init(FIXED_TYPE + FIXED_SIZE + CUDA_HOST_MEM + ACCESS_WRITE, &cuda_mem); }
305
template<
typename
_Tp>
inline
306_OutputArray _OutputArray::rawOut(std::vector<_Tp>& vec)
309
v.flags = _InputArray::FIXED_TYPE + _InputArray::STD_VECTOR + rawType<_Tp>() + ACCESS_WRITE;
314
template<
typename
_Tp, std::
size_t
_Nm>
inline
315_OutputArray _OutputArray::rawOut(std::array<_Tp, _Nm>& arr)
318
v.flags = FIXED_TYPE + FIXED_SIZE + MATX + traits::Type<_Tp>::value + ACCESS_WRITE;
319
v.obj = (
void*)arr.data();
326
inline
_InputOutputArray::_InputOutputArray() { init(0+ACCESS_RW, 0); }
327
inline
_InputOutputArray::_InputOutputArray(
int
_flags,
void* _obj) { init(_flags+ACCESS_RW, _obj); }
328
inline
_InputOutputArray::_InputOutputArray(Mat& m) { init(MAT+ACCESS_RW, &m); }
329
inline
_InputOutputArray::_InputOutputArray(std::vector<Mat>& vec) { init(STD_VECTOR_MAT+ACCESS_RW, &vec); }
330
inline
_InputOutputArray::_InputOutputArray(UMat& m) { init(UMAT+ACCESS_RW, &m); }
331
inline
_InputOutputArray::_InputOutputArray(std::vector<UMat>& vec) { init(STD_VECTOR_UMAT+ACCESS_RW, &vec); }
333
template<
typename
_Tp>
inline
334_InputOutputArray::_InputOutputArray(std::vector<_Tp>& vec)
335{ init(FIXED_TYPE + STD_VECTOR + traits::Type<_Tp>::value + ACCESS_RW, &vec); }
337
template<
typename
_Tp, std::
size_t
_Nm>
inline
338_InputOutputArray::_InputOutputArray(std::array<_Tp, _Nm>& arr)
339{ init(FIXED_TYPE + FIXED_SIZE + MATX + traits::Type<_Tp>::value + ACCESS_RW, arr.data(), Size(1, _Nm)); }
341
template<std::
size_t
_Nm>
inline
342_InputOutputArray::_InputOutputArray(std::array<Mat, _Nm>& arr)
343{ init(STD_ARRAY_MAT + ACCESS_RW, arr.data(), Size(1, _Nm)); }
345
template<
typename
_Tp>
inline
346_InputOutputArray::_InputOutputArray(std::vector<std::vector<_Tp> >& vec)
347{ init(FIXED_TYPE + STD_VECTOR_VECTOR + traits::Type<_Tp>::value + ACCESS_RW, &vec); }
349
template<
typename
_Tp>
inline
350_InputOutputArray::_InputOutputArray(std::vector<Mat_<_Tp> >& vec)
351{ init(FIXED_TYPE + STD_VECTOR_MAT + traits::Type<_Tp>::value + ACCESS_RW, &vec); }
353
template<
typename
_Tp>
inline
354_InputOutputArray::_InputOutputArray(Mat_<_Tp>& m)
355{ init(FIXED_TYPE + MAT + traits::Type<_Tp>::value + ACCESS_RW, &m); }
357
template<
typename
_Tp,
int
m,
int
n>
inline
358_InputOutputArray::_InputOutputArray(Matx<_Tp, m, n>& mtx)
359{ init(FIXED_TYPE + FIXED_SIZE + MATX + traits::Type<_Tp>::value + ACCESS_RW, &mtx, Size(n, m)); }
361
template<
typename
_Tp>
inline
362_InputOutputArray::_InputOutputArray(_Tp* vec,
int
n)
363{ init(FIXED_TYPE + FIXED_SIZE + MATX + traits::Type<_Tp>::value + ACCESS_RW, vec, Size(n, 1)); }
365
template<
typename
_Tp>
inline
366_InputOutputArray::_InputOutputArray(
const
std::vector<_Tp>& vec)
367{ init(FIXED_TYPE + FIXED_SIZE + STD_VECTOR + traits::Type<_Tp>::value + ACCESS_RW, &vec); }
369
template<
typename
_Tp, std::
size_t
_Nm>
inline
370_InputOutputArray::_InputOutputArray(
const
std::array<_Tp, _Nm>& arr)
371{ init(FIXED_TYPE + FIXED_SIZE + MATX + traits::Type<_Tp>::value + ACCESS_RW, arr.data(), Size(1, _Nm)); }
373
template<std::
size_t
_Nm>
inline
374_InputOutputArray::_InputOutputArray(
const
std::array<Mat, _Nm>& arr)
375{ init(FIXED_SIZE + STD_ARRAY_MAT + ACCESS_RW, arr.data(), Size(1, _Nm)); }
377
template<
typename
_Tp>
inline
378_InputOutputArray::_InputOutputArray(
const
std::vector<std::vector<_Tp> >& vec)
379{ init(FIXED_TYPE + FIXED_SIZE + STD_VECTOR_VECTOR + traits::Type<_Tp>::value + ACCESS_RW, &vec); }
381
template<
typename
_Tp>
inline
382_InputOutputArray::_InputOutputArray(
const
std::vector<Mat_<_Tp> >& vec)
383{ init(FIXED_TYPE + FIXED_SIZE + STD_VECTOR_MAT + traits::Type<_Tp>::value + ACCESS_RW, &vec); }
385
template<
typename
_Tp>
inline
386_InputOutputArray::_InputOutputArray(
const
Mat_<_Tp>& m)
387{ init(FIXED_TYPE + FIXED_SIZE + MAT + traits::Type<_Tp>::value + ACCESS_RW, &m); }
389
template<
typename
_Tp,
int
m,
int
n>
inline
390_InputOutputArray::_InputOutputArray(
const
Matx<_Tp, m, n>& mtx)
391{ init(FIXED_TYPE + FIXED_SIZE + MATX + traits::Type<_Tp>::value + ACCESS_RW, &mtx, Size(n, m)); }
393
template<
typename
_Tp>
inline
394_InputOutputArray::_InputOutputArray(
const
_Tp* vec,
int
n)
395{ init(FIXED_TYPE + FIXED_SIZE + MATX + traits::Type<_Tp>::value + ACCESS_RW, vec, Size(n, 1)); }
397
inline
_InputOutputArray::_InputOutputArray(cuda::GpuMat& d_mat)
398{ init(CUDA_GPU_MAT + ACCESS_RW, &d_mat); }
400
inline
_InputOutputArray::_InputOutputArray(ogl::Buffer& buf)
401{ init(OPENGL_BUFFER + ACCESS_RW, &buf); }
403
inline
_InputOutputArray::_InputOutputArray(cuda::HostMem& cuda_mem)
404{ init(CUDA_HOST_MEM + ACCESS_RW, &cuda_mem); }
406
inline
_InputOutputArray::_InputOutputArray(
const
Mat& m)
407{ init(FIXED_TYPE + FIXED_SIZE + MAT + ACCESS_RW, &m); }
409
inline
_InputOutputArray::_InputOutputArray(
const
std::vector<Mat>& vec)
410{ init(FIXED_SIZE + STD_VECTOR_MAT + ACCESS_RW, &vec); }
412
inline
_InputOutputArray::_InputOutputArray(
const
UMat& m)
413{ init(FIXED_TYPE + FIXED_SIZE + UMAT + ACCESS_RW, &m); }
415
inline
_InputOutputArray::_InputOutputArray(
const
std::vector<UMat>& vec)
416{ init(FIXED_SIZE + STD_VECTOR_UMAT + ACCESS_RW, &vec); }
418
inline
_InputOutputArray::_InputOutputArray(
const
cuda::GpuMat& d_mat)
419{ init(FIXED_TYPE + FIXED_SIZE + CUDA_GPU_MAT + ACCESS_RW, &d_mat); }
421
inline
_InputOutputArray::_InputOutputArray(
const
std::vector<cuda::GpuMat>& d_mat)
422{ init(FIXED_TYPE + FIXED_SIZE + STD_VECTOR_CUDA_GPU_MAT + ACCESS_RW, &d_mat);}
424
template<>
inline
_InputOutputArray::_InputOutputArray(std::vector<cuda::GpuMat>& d_mat)
425{ init(FIXED_TYPE + FIXED_SIZE + STD_VECTOR_CUDA_GPU_MAT + ACCESS_RW, &d_mat);}
427
inline
_InputOutputArray::_InputOutputArray(
const
ogl::Buffer& buf)
428{ init(FIXED_TYPE + FIXED_SIZE + OPENGL_BUFFER + ACCESS_RW, &buf); }
430
inline
_InputOutputArray::_InputOutputArray(
const
cuda::HostMem& cuda_mem)
431{ init(FIXED_TYPE + FIXED_SIZE + CUDA_HOST_MEM + ACCESS_RW, &cuda_mem); }
433
template<
typename
_Tp>
inline
434_InputOutputArray _InputOutputArray::rawInOut(std::vector<_Tp>& vec)
437
v.flags = _InputArray::FIXED_TYPE + _InputArray::STD_VECTOR + rawType<_Tp>() + ACCESS_RW;
442
template<
typename
_Tp, std::
size_t
_Nm>
inline
443_InputOutputArray _InputOutputArray::rawInOut(std::array<_Tp, _Nm>& arr)
446
v.flags = FIXED_TYPE + FIXED_SIZE + MATX + traits::Type<_Tp>::value + ACCESS_RW;
447
v.obj = (
void*)arr.data();
453
template<
typename
_Tp>
static
inline
_InputArray
rawIn(_Tp& v) {
return
_InputArray::rawIn(v); }
454
template<
typename
_Tp>
static
inline
_OutputArray
rawOut(_Tp& v) {
return
_OutputArray::rawOut(v); }
455
template<
typename
_Tp>
static
inline
_InputOutputArray
rawInOut(_Tp& v) {
return
_InputOutputArray::rawInOut(v); }
461
template<
typename
_Tp>
inline
462
Mat::Mat(
const
std::vector<_Tp>& vec,
bool
copyData)
463
: flags(MAGIC_VAL + traits::Type<_Tp>::value + CV_MAT_CONT_FLAG), dims(2), rows((int)vec.size()),
464
cols(1), data(0), datastart(0), dataend(0), datalimit(0), allocator(0), u(0), size(&rows), step(0)
470
step[0] = step[1] =
sizeof(_Tp);
471
datastart = data = (uchar*)&vec[0];
472
datalimit = dataend = datastart + rows * step[0];
475
Mat((
int)vec.size(), 1, traits::Type<_Tp>::value, (uchar*)&vec[0]).copyTo(*
this);
478
template<
typename
_Tp,
typename>
inline
479Mat::Mat(
const
std::initializer_list<_Tp> list)
483
Mat((
int)list.size(), 1, traits::Type<_Tp>::value, (uchar*)list.begin()).copyTo(*
this);
486
template<
typename
_Tp>
inline
487Mat::Mat(
const
std::initializer_list<int> sizes,
const
std::initializer_list<_Tp> list)
490
size_t
size_total = 1;
495
Mat((
int)sizes.size(), (
int*)sizes.begin(), traits::Type<_Tp>::value, (uchar*)list.begin()).copyTo(*
this);
498
template<
typename
_Tp, std::
size_t
_Nm>
inline
499Mat::Mat(
const
std::array<_Tp, _Nm>& arr,
bool
copyData)
500
: flags(MAGIC_VAL + traits::Type<_Tp>::value + CV_MAT_CONT_FLAG), dims(2), rows((int)arr.size()),
501
cols(1), data(0), datastart(0), dataend(0), datalimit(0), allocator(0), u(0), size(&rows), step(0)
507
step[0] = step[1] =
sizeof(_Tp);
508
datastart = data = (uchar*)arr.data();
509
datalimit = dataend = datastart + rows * step[0];
512
Mat((
int)arr.size(), 1, traits::Type<_Tp>::value, (uchar*)arr.data()).copyTo(*
this);
515
template<
typename
_Tp,
int
n>
inline
516Mat::Mat(
const
Vec<_Tp, n>& vec,
bool
copyData)
517
: flags(MAGIC_VAL + traits::Type<_Tp>::value + CV_MAT_CONT_FLAG), dims(2), rows(n), cols(1), data(0),
518
datastart(0), dataend(0), datalimit(0), allocator(0), u(0), size(&rows), step(0)
522
step[0] = step[1] =
sizeof(_Tp);
523
datastart = data = (uchar*)vec.val;
524
datalimit = dataend = datastart + rows * step[0];
527
Mat(n, 1, traits::Type<_Tp>::value, (
void*)vec.val).copyTo(*
this);
531
template<
typename
_Tp,
int
m,
int
n>
inline
532Mat::Mat(
const
Matx<_Tp,m,n>& M,
bool
copyData)
533
: flags(MAGIC_VAL + traits::Type<_Tp>::value + CV_MAT_CONT_FLAG), dims(2), rows(m), cols(n), data(0),
534
datastart(0), dataend(0), datalimit(0), allocator(0), u(0), size(&rows), step(0)
538
step[0] = cols *
sizeof(_Tp);
539
step[1] =
sizeof(_Tp);
540
datastart = data = (uchar*)M.val;
541
datalimit = dataend = datastart + rows * step[0];
544
Mat(m, n, traits::Type<_Tp>::value, (uchar*)M.val).copyTo(*
this);
547
template<
typename
_Tp>
inline
548Mat::Mat(
const
Point_<_Tp>& pt,
bool
copyData)
549
: flags(MAGIC_VAL + traits::Type<_Tp>::value + CV_MAT_CONT_FLAG), dims(2), rows(2), cols(1), data(0),
550
datastart(0), dataend(0), datalimit(0), allocator(0), u(0), size(&rows), step(0)
554
step[0] = step[1] =
sizeof(_Tp);
555
datastart = data = (uchar*)&pt.x;
556
datalimit = dataend = datastart + rows * step[0];
560
create(2, 1, traits::Type<_Tp>::value);
561
((_Tp*)data)[0] = pt.x;
562
((_Tp*)data)[1] = pt.y;
566
template<
typename
_Tp>
inline
567Mat::Mat(
const
Point3_<_Tp>& pt,
bool
copyData)
568
: flags(MAGIC_VAL + traits::Type<_Tp>::value + CV_MAT_CONT_FLAG), dims(2), rows(3), cols(1), data(0),
569
datastart(0), dataend(0), datalimit(0), allocator(0), u(0), size(&rows), step(0)
573
step[0] = step[1] =
sizeof(_Tp);
574
datastart = data = (uchar*)&pt.x;
575
datalimit = dataend = datastart + rows * step[0];
579
create(3, 1, traits::Type<_Tp>::value);
580
((_Tp*)data)[0] = pt.x;
581
((_Tp*)data)[1] = pt.y;
582
((_Tp*)data)[2] = pt.z;
586
template<
typename
_Tp>
inline
587Mat::Mat(
const
MatCommaInitializer_<_Tp>& commaInitializer)
588
: flags(MAGIC_VAL + traits::Type<_Tp>::value + CV_MAT_CONT_FLAG), dims(0), rows(0), cols(0), data(0),
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);
649Mat Mat::operator()(
const
std::vector<Range>& ranges)
const
651
return
Mat(*
this, ranges);
655
bool
Mat::isContinuous()
const
657
return
(flags & CONTINUOUS_FLAG) != 0;
661
bool
Mat::isSubmatrix()
const
663
return
(flags & SUBMATRIX_FLAG) != 0;
667
size_t
Mat::elemSize()
const
669
size_t
res = dims > 0 ? step.p[dims - 1] : 0;
675
size_t
Mat::elemSize1()
const
681
int
Mat::type()
const
683
return
CV_MAT_TYPE(flags);
687
int
Mat::depth()
const
689
return
CV_MAT_DEPTH(flags);
693
int
Mat::channels()
const
695
return
CV_MAT_CN(flags);
699uchar* Mat::ptr(
int
y)
701
CV_DbgAssert( y == 0 || (data && dims >= 1 && (
unsigned)y < (
unsigned)size.p[0]) );
702
return
data + step.p[0] * y;
706
const
uchar* Mat::ptr(
int
y)
const
708
CV_DbgAssert( y == 0 || (data && dims >= 1 && (
unsigned)y < (
unsigned)size.p[0]) );
709
return
data + step.p[0] * y;
712
template<
typename
_Tp>
inline
715
CV_DbgAssert( y == 0 || (data && dims >= 1 && (
unsigned)y < (
unsigned)size.p[0]) );
716
return
(_Tp*)(data + step.p[0] * y);
719
template<
typename
_Tp>
inline
720
const
_Tp* Mat::ptr(
int
y)
const
722
CV_DbgAssert( y == 0 || (data && dims >= 1 && (
unsigned)y < (
unsigned)size.p[0]) );
723
return
(
const
_Tp*)(data + step.p[0] * y);
727uchar* Mat::ptr(
int
i0,
int
i1)
733
return
data + i0 * step.p[0] + i1 * step.p[1];
737
const
uchar* Mat::ptr(
int
i0,
int
i1)
const
743
return
data + i0 * step.p[0] + i1 * step.p[1];
746
template<
typename
_Tp>
inline
747_Tp* Mat::ptr(
int
i0,
int
i1)
753
return
(_Tp*)(data + i0 * step.p[0] + i1 * step.p[1]);
756
template<
typename
_Tp>
inline
757
const
_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)
774
return
data + i0 * step.p[0] + i1 * step.p[1] + i2 * step.p[2];
778
const
uchar* Mat::ptr(
int
i0,
int
i1,
int
i2)
const
785
return
data + i0 * step.p[0] + i1 * step.p[1] + i2 * step.p[2];
788
template<
typename
_Tp>
inline
789_Tp* Mat::ptr(
int
i0,
int
i1,
int
i2)
796
return
(_Tp*)(data + i0 * step.p[0] + i1 * step.p[1] + i2 * step.p[2]);
799
template<
typename
_Tp>
inline
800
const
_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]);
811uchar* Mat::ptr(
const
int* idx)
816
for( i = 0; i < d; i++ )
819
p += idx[i] * step.p[i];
825
const
uchar* Mat::ptr(
const
int* idx)
const
830
for( i = 0; i < d; i++ )
833
p += idx[i] * step.p[i];
838
template<
typename
_Tp>
inline
839_Tp* Mat::ptr(
const
int* idx)
844
for( i = 0; i < d; i++ )
847
p += idx[i] * step.p[i];
852
template<
typename
_Tp>
inline
853
const
_Tp* Mat::ptr(
const
int* idx)
const
858
for( i = 0; i < d; i++ )
861
p += idx[i] * step.p[i];
863
return
(
const
_Tp*)p;
866
template<
int
n>
inline
867uchar* Mat::ptr(
const
Vec<int, n>& idx)
869
return
Mat::ptr(idx.val);
872
template<
int
n>
inline
873
const
uchar* Mat::ptr(
const
Vec<int, n>& idx)
const
875
return
Mat::ptr(idx.val);
878
template<
typename
_Tp,
int
n>
inline
879_Tp* Mat::ptr(
const
Vec<int, n>& idx)
882
return
Mat::ptr<_Tp>(idx.val);
885
template<
typename
_Tp,
int
n>
inline
886
const
_Tp* Mat::ptr(
const
Vec<int, n>& idx)
const
889
return
Mat::ptr<_Tp>(idx.val);
893
template<
typename
_Tp>
inline
894_Tp& Mat::at(
int
i0,
int
i1)
899
CV_DbgAssert((
unsigned)(i1 * DataType<_Tp>::channels) < (
unsigned)(size.p[1] * channels()));
901
return
((_Tp*)(data + step.p[0] * i0))[i1];
904
template<
typename
_Tp>
inline
905
const
_Tp& Mat::at(
int
i0,
int
i1)
const
910
CV_DbgAssert((
unsigned)(i1 * DataType<_Tp>::channels) < (
unsigned)(size.p[1] * channels()));
912
return
((
const
_Tp*)(data + step.p[0] * i0))[i1];
915
template<
typename
_Tp>
inline
916_Tp& Mat::at(Point pt)
921
CV_DbgAssert((
unsigned)(pt.x * DataType<_Tp>::channels) < (
unsigned)(size.p[1] * channels()));
923
return
((_Tp*)(data + step.p[0] * pt.y))[pt.x];
926
template<
typename
_Tp>
inline
927
const
_Tp& Mat::at(Point pt)
const
932
CV_DbgAssert((
unsigned)(pt.x * DataType<_Tp>::channels) < (
unsigned)(size.p[1] * channels()));
934
return
((
const
_Tp*)(data + step.p[0] * pt.y))[pt.x];
937
template<
typename
_Tp>
inline
942
CV_DbgAssert((
unsigned)i0 < (
unsigned)(size.p[0] * size.p[1]));
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];
952
template<
typename
_Tp>
inline
953
const
_Tp& Mat::at(
int
i0)
const
957
CV_DbgAssert((
unsigned)i0 < (
unsigned)(size.p[0] * size.p[1]));
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];
967
template<
typename
_Tp>
inline
968_Tp& Mat::at(
int
i0,
int
i1,
int
i2)
971
return
*(_Tp*)ptr(i0, i1, i2);
974
template<
typename
_Tp>
inline
975
const
_Tp& Mat::at(
int
i0,
int
i1,
int
i2)
const
978
return
*(
const
_Tp*)ptr(i0, i1, i2);
981
template<
typename
_Tp>
inline
982_Tp& Mat::at(
const
int* idx)
985
return
*(_Tp*)ptr(idx);
988
template<
typename
_Tp>
inline
989
const
_Tp& Mat::at(
const
int* idx)
const
992
return
*(
const
_Tp*)ptr(idx);
995
template<
typename
_Tp,
int
n>
inline
996_Tp& Mat::at(
const
Vec<int, n>& idx)
999
return
*(_Tp*)ptr(idx.val);
1002
template<
typename
_Tp,
int
n>
inline
1003
const
_Tp& Mat::at(
const
Vec<int, n>& idx)
const
1006
return
*(
const
_Tp*)ptr(idx.val);
1009
template<
typename
_Tp>
inline
1010MatConstIterator_<_Tp> Mat::begin()
const
1013
return
MatConstIterator_<_Tp>();
1015
return
MatConstIterator_<_Tp>((
const
Mat_<_Tp>*)
this);
1018
template<
typename
_Tp>
inline
1019std::reverse_iterator<MatConstIterator_<_Tp>> Mat::rbegin()
const
1022
return
std::reverse_iterator<MatConstIterator_<_Tp>>();
1024
MatConstIterator_<_Tp> it((
const
Mat_<_Tp>*)
this);
1026
return
std::reverse_iterator<MatConstIterator_<_Tp>> (it);
1029
template<
typename
_Tp>
inline
1030MatConstIterator_<_Tp> Mat::end()
const
1033
return
MatConstIterator_<_Tp>();
1035
MatConstIterator_<_Tp> it((
const
Mat_<_Tp>*)
this);
1040
template<
typename
_Tp>
inline
1041std::reverse_iterator<MatConstIterator_<_Tp>> Mat::rend()
const
1044
return
std::reverse_iterator<MatConstIterator_<_Tp>>();
1046
return
std::reverse_iterator<MatConstIterator_<_Tp>>((
const
Mat_<_Tp>*)
this);
1049
template<
typename
_Tp>
inline
1050MatIterator_<_Tp> Mat::begin()
1053
return
MatIterator_<_Tp>();
1055
return
MatIterator_<_Tp>((Mat_<_Tp>*)
this);
1058
template<
typename
_Tp>
inline
1059std::reverse_iterator<MatIterator_<_Tp>> Mat::rbegin()
1062
return
std::reverse_iterator<MatIterator_<_Tp>>();
1064
MatIterator_<_Tp> it((Mat_<_Tp>*)
this);
1066
return
std::reverse_iterator<MatIterator_<_Tp>>(it);
1069
template<
typename
_Tp>
inline
1070MatIterator_<_Tp> Mat::end()
1073
return
MatIterator_<_Tp>();
1075
MatIterator_<_Tp> it((Mat_<_Tp>*)
this);
1080
template<
typename
_Tp>
inline
1081std::reverse_iterator<MatIterator_<_Tp>> Mat::rend()
1084
return
std::reverse_iterator<MatIterator_<_Tp>>();
1086
return
std::reverse_iterator<MatIterator_<_Tp>>(MatIterator_<_Tp>((Mat_<_Tp>*)
this));
1089
template<
typename
_Tp,
typename
Functor>
inline
1090
void
Mat::forEach(
const
Functor& operation) {
1091
this->forEach_impl<_Tp>(operation);
1094
template<
typename
_Tp,
typename
Functor>
inline
1095
void
Mat::forEach(
const
Functor& operation)
const
{
1097
(
const_cast<Mat*
>(
this))->forEach<_Tp>(operation);
1100
template<
typename
_Tp>
inline
1101Mat::operator std::vector<_Tp>()
const
1108
template<
typename
_Tp, std::
size_t
_Nm>
inline
1109Mat::operator std::array<_Tp, _Nm>()
const
1111
std::array<_Tp, _Nm> v;
1116
template<
typename
_Tp,
int
n>
inline
1117Mat::operator Vec<_Tp, n>()
const
1119
CV_Assert( data && dims <= 2 && (rows == 1 || cols == 1) &&
1120
rows + cols - 1 == n && channels() == 1 );
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());
1130
template<
typename
_Tp,
int
m,
int
n>
inline
1131Mat::operator Matx<_Tp, m, n>()
const
1133
CV_Assert( data && dims <= 2 && rows == m && cols == n && channels() == 1 );
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());
1143
template<
typename
_Tp>
inline
1144
void
Mat::push_back(
const
_Tp& elem)
1148
*
this
= Mat(1, 1, traits::Type<_Tp>::value, (
void*)&elem).clone();
1151
CV_Assert(traits::Type<_Tp>::value == type() && cols == 1
1153
const
uchar* tmp = dataend + step[0];
1154
if( !isSubmatrix() && isContinuous() && tmp <= datalimit )
1156
*(_Tp*)(data + (size.p[0]++) * step.p[0]) = elem;
1163
template<
typename
_Tp>
inline
1164
void
Mat::push_back(
const
Mat_<_Tp>& m)
1166
push_back((
const
Mat&)m);
1170
void
Mat::push_back(
const
MatExpr& expr)
1172
push_back(
static_cast<Mat
>(expr));
1176
template<
typename
_Tp>
inline
1177
void
Mat::push_back(
const
std::vector<_Tp>& v)
1186MatSize::MatSize(
int* _p) CV_NOEXCEPT
1190
int
MatSize::dims() const CV_NOEXCEPT
1196Size MatSize::operator()()
const
1199
return
Size(p[1], p[0]);
1203
const
int& MatSize::operator[](
int
i)
const
1206
#ifdef __OPENCV_BUILD
1213
int& MatSize::operator[](
int
i)
1216
#ifdef __OPENCV_BUILD
1223MatSize::operator
const
int*()
const
CV_NOEXCEPT
1229
bool
MatSize::operator != (
const
MatSize& sz)
const
CV_NOEXCEPT
1231
return
!(*
this
== sz);
1239MatStep::MatStep() CV_NOEXCEPT
1241
p = buf; p[0] = p[1] = 0;
1245MatStep::MatStep(
size_t
s) CV_NOEXCEPT
1247
p = buf; p[0] = s; p[1] = 0;
1251
const
size_t& MatStep::operator[](
int
i)
const
CV_NOEXCEPT
1257
size_t& MatStep::operator[](
int
i) CV_NOEXCEPT
1262
inline
MatStep::operator size_t()
const
1268
inline
MatStep& MatStep::operator = (
size_t
s)
1279
template<
typename
_Tp>
inline
1280Mat_<_Tp>::Mat_() CV_NOEXCEPT
1283
flags = (flags & ~CV_MAT_TYPE_MASK) + traits::Type<_Tp>::value;
1286
template<
typename
_Tp>
inline
1287Mat_<_Tp>::Mat_(
int
_rows,
int
_cols)
1288
: Mat(_rows, _cols, traits::Type<_Tp>::value)
1292
template<
typename
_Tp>
inline
1293Mat_<_Tp>::Mat_(
int
_rows,
int
_cols,
const
_Tp& value)
1294
: Mat(_rows, _cols, traits::Type<_Tp>::value)
1299
template<
typename
_Tp>
inline
1300Mat_<_Tp>::Mat_(Size _sz)
1301
: Mat(_sz.height, _sz.width, traits::Type<_Tp>::value)
1304
template<
typename
_Tp>
inline
1305Mat_<_Tp>::Mat_(Size _sz,
const
_Tp& value)
1306
: Mat(_sz.height, _sz.width, traits::Type<_Tp>::value)
1311
template<
typename
_Tp>
inline
1312Mat_<_Tp>::Mat_(
int
_dims,
const
int* _sz)
1313
: Mat(_dims, _sz, traits::Type<_Tp>::value)
1316
template<
typename
_Tp>
inline
1317Mat_<_Tp>::Mat_(
int
_dims,
const
int* _sz,
const
_Tp& _s)
1318
: Mat(_dims, _sz, traits::Type<_Tp>::value, Scalar(_s))
1321
template<
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)
1326
template<
typename
_Tp>
inline
1327Mat_<_Tp>::Mat_(
const
Mat_<_Tp>& m,
const
Range* ranges)
1331
template<
typename
_Tp>
inline
1332Mat_<_Tp>::Mat_(
const
Mat_<_Tp>& m,
const
std::vector<Range>& ranges)
1336
template<
typename
_Tp>
inline
1337Mat_<_Tp>::Mat_(
const
Mat& m)
1340
flags = (flags & ~CV_MAT_TYPE_MASK) + traits::Type<_Tp>::value;
1344
template<
typename
_Tp>
inline
1345Mat_<_Tp>::Mat_(
const
Mat_& m)
1349
template<
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)
1354
template<
typename
_Tp>
inline
1355Mat_<_Tp>::Mat_(
const
Mat_& m,
const
Range& _rowRange,
const
Range& _colRange)
1356
: Mat(m, _rowRange, _colRange)
1359
template<
typename
_Tp>
inline
1360Mat_<_Tp>::Mat_(
const
Mat_& m,
const
Rect& roi)
1364
template<
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);
1373
template<
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);
1382
template<
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);
1391
template<
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);
1400
template<
typename
_Tp>
inline
1401Mat_<_Tp>::Mat_(
const
MatCommaInitializer_<_Tp>& commaInitializer)
1402
: Mat(commaInitializer)
1405
template<
typename
_Tp>
inline
1406Mat_<_Tp>::Mat_(
const
std::vector<_Tp>& vec,
bool
copyData)
1407
: Mat(vec, copyData)
1410
template<
typename
_Tp>
inline
1411Mat_<_Tp>::Mat_(std::initializer_list<_Tp> list)
1415
template<
typename
_Tp>
inline
1416Mat_<_Tp>::Mat_(
const
std::initializer_list<int> sizes, std::initializer_list<_Tp> list)
1420
template<
typename
_Tp>
template<std::
size_t
_Nm>
inline
1421Mat_<_Tp>::Mat_(
const
std::array<_Tp, _Nm>& arr,
bool
copyData)
1422
: Mat(arr, copyData)
1425
template<
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());
1447
template<
typename
_Tp>
inline
1448Mat_<_Tp>& Mat_<_Tp>::operator = (
const
Mat_& m)
1454
template<
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));
1462
template<
typename
_Tp>
inline
1463
void
Mat_<_Tp>::create(
int
_rows,
int
_cols)
1465
Mat::create(_rows, _cols, traits::Type<_Tp>::value);
1468
template<
typename
_Tp>
inline
1469
void
Mat_<_Tp>::create(Size _sz)
1471
Mat::create(_sz, traits::Type<_Tp>::value);
1474
template<
typename
_Tp>
inline
1475
void
Mat_<_Tp>::create(
int
_dims,
const
int* _sz)
1477
Mat::create(_dims, _sz, traits::Type<_Tp>::value);
1480
template<
typename
_Tp>
inline
1481
void
Mat_<_Tp>::release()
1484
flags = (flags & ~CV_MAT_TYPE_MASK) + traits::Type<_Tp>::value;
1487
template<
typename
_Tp>
inline
1488Mat_<_Tp> Mat_<_Tp>::cross(
const
Mat_& m)
const
1490
return
Mat_<_Tp>(Mat::cross(m));
1493
template<
typename
_Tp>
template<
typename
T2>
inline
1494Mat_<_Tp>::operator Mat_<T2>()
const
1496
return
Mat_<T2>(
static_cast<
const
Mat&
>(*
this));
1499
template<
typename
_Tp>
inline
1500Mat_<_Tp> Mat_<_Tp>::row(
int
y)
const
1502
return
Mat_(*
this, Range(y, y+1), Range::all());
1505
template<
typename
_Tp>
inline
1506Mat_<_Tp> Mat_<_Tp>::col(
int
x)
const
1508
return
Mat_(*
this, Range::all(), Range(x, x+1));
1511
template<
typename
_Tp>
inline
1512Mat_<_Tp> Mat_<_Tp>::diag(
int
d)
const
1514
return
Mat_(Mat::diag(d));
1517
template<
typename
_Tp>
inline
1518Mat_<_Tp> Mat_<_Tp>::clone()
const
1520
return
Mat_(Mat::clone());
1523
template<
typename
_Tp>
inline
1524
size_t
Mat_<_Tp>::elemSize()
const
1530
template<
typename
_Tp>
inline
1531
size_t
Mat_<_Tp>::elemSize1()
const
1533
CV_DbgAssert( Mat::elemSize1() ==
sizeof(_Tp) / DataType<_Tp>::channels );
1534
return
sizeof(_Tp) / DataType<_Tp>::channels;
1537
template<
typename
_Tp>
inline
1538
int
Mat_<_Tp>::type()
const
1540
CV_DbgAssert( Mat::type() == traits::Type<_Tp>::value );
1541
return
traits::Type<_Tp>::value;
1544
template<
typename
_Tp>
inline
1545
int
Mat_<_Tp>::depth()
const
1547
CV_DbgAssert( Mat::depth() == traits::Depth<_Tp>::value );
1548
return
traits::Depth<_Tp>::value;
1551
template<
typename
_Tp>
inline
1552
int
Mat_<_Tp>::channels()
const
1554
CV_DbgAssert( Mat::channels() == DataType<_Tp>::channels );
1555
return
DataType<_Tp>::channels;
1558
template<
typename
_Tp>
inline
1559
size_t
Mat_<_Tp>::stepT(
int
i)
const
1561
return
step.p[i] / elemSize();
1564
template<
typename
_Tp>
inline
1565
size_t
Mat_<_Tp>::step1(
int
i)
const
1567
return
step.p[i] / elemSize1();
1570
template<
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));
1576
template<
typename
_Tp>
inline
1577Mat_<_Tp> Mat_<_Tp>::operator()(
const
Range& _rowRange,
const
Range& _colRange )
const
1579
return
Mat_<_Tp>(*
this, _rowRange, _colRange);
1582
template<
typename
_Tp>
inline
1583Mat_<_Tp> Mat_<_Tp>::operator()(
const
Rect& roi )
const
1585
return
Mat_<_Tp>(*
this, roi);
1588
template<
typename
_Tp>
inline
1589Mat_<_Tp> Mat_<_Tp>::operator()(
const
Range* ranges )
const
1591
return
Mat_<_Tp>(*
this, ranges);
1594
template<
typename
_Tp>
inline
1595Mat_<_Tp> Mat_<_Tp>::operator()(
const
std::vector<Range>& ranges)
const
1597
return
Mat_<_Tp>(*
this, ranges);
1600
template<
typename
_Tp>
inline
1601_Tp* Mat_<_Tp>::operator [](
int
y)
1604
return
(_Tp*)(data + y*step.p[0]);
1607
template<
typename
_Tp>
inline
1608
const
_Tp* Mat_<_Tp>::operator [](
int
y)
const
1611
return
(
const
_Tp*)(data + y*step.p[0]);
1614
template<
typename
_Tp>
inline
1615_Tp& Mat_<_Tp>::operator ()(
int
i0,
int
i1)
1622
return
((_Tp*)(data + step.p[0] * i0))[i1];
1625
template<
typename
_Tp>
inline
1626
const
_Tp& Mat_<_Tp>::operator ()(
int
i0,
int
i1)
const
1633
return
((
const
_Tp*)(data + step.p[0] * i0))[i1];
1636
template<
typename
_Tp>
inline
1637_Tp& Mat_<_Tp>::operator ()(Point pt)
1644
return
((_Tp*)(data + step.p[0] * pt.y))[pt.x];
1647
template<
typename
_Tp>
inline
1648
const
_Tp& Mat_<_Tp>::operator ()(Point pt)
const
1655
return
((
const
_Tp*)(data + step.p[0] * pt.y))[pt.x];
1658
template<
typename
_Tp>
inline
1659_Tp& Mat_<_Tp>::operator ()(
const
int* idx)
1661
return
Mat::at<_Tp>(idx);
1664
template<
typename
_Tp>
inline
1665
const
_Tp& Mat_<_Tp>::operator ()(
const
int* idx)
const
1667
return
Mat::at<_Tp>(idx);
1670
template<
typename
_Tp>
template<
int
n>
inline
1671_Tp& Mat_<_Tp>::operator ()(
const
Vec<int, n>& idx)
1673
return
Mat::at<_Tp>(idx);
1676
template<
typename
_Tp>
template<
int
n>
inline
1677
const
_Tp& Mat_<_Tp>::operator ()(
const
Vec<int, n>& idx)
const
1679
return
Mat::at<_Tp>(idx);
1682
template<
typename
_Tp>
inline
1683_Tp& Mat_<_Tp>::operator ()(
int
i0)
1685
return
this->at<_Tp>(i0);
1688
template<
typename
_Tp>
inline
1689
const
_Tp& Mat_<_Tp>::operator ()(
int
i0)
const
1691
return
this->at<_Tp>(i0);
1694
template<
typename
_Tp>
inline
1695_Tp& Mat_<_Tp>::operator ()(
int
i0,
int
i1,
int
i2)
1697
return
this->at<_Tp>(i0, i1, i2);
1700
template<
typename
_Tp>
inline
1701
const
_Tp& Mat_<_Tp>::operator ()(
int
i0,
int
i1,
int
i2)
const
1703
return
this->at<_Tp>(i0, i1, i2);
1706
template<
typename
_Tp>
inline
1707Mat_<_Tp>::operator std::vector<_Tp>()
const
1714
template<
typename
_Tp>
template<std::
size_t
_Nm>
inline
1715Mat_<_Tp>::operator std::array<_Tp, _Nm>()
const
1717
std::array<_Tp, _Nm> a;
1722
template<
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);
1727
#if defined _MSC_VER
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>();
1735
template<
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);
1740
#if defined _MSC_VER
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>();
1750
template<
typename
_Tp>
inline
1751MatConstIterator_<_Tp> Mat_<_Tp>::begin()
const
1753
return
Mat::begin<_Tp>();
1756
template<
typename
_Tp>
inline
1757std::reverse_iterator<MatConstIterator_<_Tp>> Mat_<_Tp>::rbegin()
const
1759
return
Mat::rbegin<_Tp>();
1762
template<
typename
_Tp>
inline
1763MatConstIterator_<_Tp> Mat_<_Tp>::end()
const
1765
return
Mat::end<_Tp>();
1768
template<
typename
_Tp>
inline
1769std::reverse_iterator<MatConstIterator_<_Tp>> Mat_<_Tp>::rend()
const
1771
return
Mat::rend<_Tp>();
1774
template<
typename
_Tp>
inline
1775MatIterator_<_Tp> Mat_<_Tp>::begin()
1777
return
Mat::begin<_Tp>();
1780
template<
typename
_Tp>
inline
1781std::reverse_iterator<MatIterator_<_Tp>> Mat_<_Tp>::rbegin()
1783
return
Mat::rbegin<_Tp>();
1786
template<
typename
_Tp>
inline
1787MatIterator_<_Tp> Mat_<_Tp>::end()
1789
return
Mat::end<_Tp>();
1792
template<
typename
_Tp>
inline
1793std::reverse_iterator<MatIterator_<_Tp>> Mat_<_Tp>::rend()
1795
return
Mat::rend<_Tp>();
1798
template<
typename
_Tp>
template<
typename
Functor>
inline
1799
void
Mat_<_Tp>::forEach(
const
Functor& operation) {
1800
Mat::forEach<_Tp, Functor>(operation);
1803
template<
typename
_Tp>
template<
typename
Functor>
inline
1804
void
Mat_<_Tp>::forEach(
const
Functor& operation)
const
{
1805
Mat::forEach<_Tp, Functor>(operation);
1808
template<
typename
_Tp>
inline
1809Mat_<_Tp>::Mat_(Mat_&& m)
1814
template<
typename
_Tp>
inline
1815Mat_<_Tp>& Mat_<_Tp>::operator = (Mat_&& m)
1817
Mat::operator = (std::move(m));
1821
template<
typename
_Tp>
inline
1822Mat_<_Tp>::Mat_(Mat&& m)
1825
flags = (flags & ~CV_MAT_TYPE_MASK) + traits::Type<_Tp>::value;
1826
*
this
= std::move(m);
1829
template<
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());
1852
template<
typename
_Tp>
inline
1853Mat_<_Tp>::Mat_(MatExpr&& e)
1856
flags = (flags & ~CV_MAT_TYPE_MASK) + traits::Type<_Tp>::value;
1864SparseMat SparseMat::clone()
const
1872
size_t
SparseMat::elemSize()
const
1874
return
CV_ELEM_SIZE(flags);
1878
size_t
SparseMat::elemSize1()
const
1884
int
SparseMat::type()
const
1886
return
CV_MAT_TYPE(flags);
1890
int
SparseMat::depth()
const
1892
return
CV_MAT_DEPTH(flags);
1896
int
SparseMat::channels()
const
1898
return
CV_MAT_CN(flags);
1902
const
int* SparseMat::size()
const
1904
return
hdr ? hdr->size : 0;
1908
int
SparseMat::size(
int
i)
const
1913
return
hdr->size[i];
1919
int
SparseMat::dims()
const
1921
return
hdr ? hdr->dims : 0;
1925
size_t
SparseMat::nzcount()
const
1927
return
hdr ? hdr->nodeCount : 0;
1930
template<
typename
_Tp>
inline
1931_Tp& SparseMat::ref(
int
i0,
size_t* hashval)
1933
return
*(_Tp*)((SparseMat*)
this)->ptr(i0,
true, hashval);
1936
template<
typename
_Tp>
inline
1937_Tp& SparseMat::ref(
int
i0,
int
i1,
size_t* hashval)
1939
return
*(_Tp*)((SparseMat*)
this)->ptr(i0, i1,
true, hashval);
1942
template<
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);
1948
template<
typename
_Tp>
inline
1949_Tp& SparseMat::ref(
const
int* idx,
size_t* hashval)
1951
return
*(_Tp*)((SparseMat*)
this)->ptr(idx,
true, hashval);
1954
template<
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();
1961
template<
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();
1968
template<
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();
1975
template<
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();
1982
template<
typename
_Tp>
inline
1983
const
_Tp* SparseMat::find(
int
i0,
size_t* hashval)
const
1985
return
(
const
_Tp*)((SparseMat*)
this)->ptr(i0,
false, hashval);
1988
template<
typename
_Tp>
inline
1989
const
_Tp* SparseMat::find(
int
i0,
int
i1,
size_t* hashval)
const
1991
return
(
const
_Tp*)((SparseMat*)
this)->ptr(i0, i1,
false, hashval);
1994
template<
typename
_Tp>
inline
1995
const
_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);
2000
template<
typename
_Tp>
inline
2001
const
_Tp* SparseMat::find(
const
int* idx,
size_t* hashval)
const
2003
return
(
const
_Tp*)((SparseMat*)
this)->ptr(idx,
false, hashval);
2006
template<
typename
_Tp>
inline
2007_Tp& SparseMat::value(Node* n)
2009
return
*(_Tp*)((uchar*)n + hdr->valueOffset);
2012
template<
typename
_Tp>
inline
2013
const
_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];
2025
const
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);
2058
template<
typename
_Tp>
inline
2059SparseMatIterator_<_Tp> SparseMat::begin()
2061
return
SparseMatIterator_<_Tp>(
this);
2064
template<
typename
_Tp>
inline
2065SparseMatConstIterator_<_Tp> SparseMat::begin()
const
2067
return
SparseMatConstIterator_<_Tp>(
this);
2070
template<
typename
_Tp>
inline
2071SparseMatIterator_<_Tp> SparseMat::end()
2073
SparseMatIterator_<_Tp> it(
this);
2078
template<
typename
_Tp>
inline
2079SparseMatConstIterator_<_Tp> SparseMat::end()
const
2081
SparseMatConstIterator_<_Tp> it(
this);
2090
template<
typename
_Tp>
inline
2091SparseMat_<_Tp>::SparseMat_()
2093
flags = MAGIC_VAL + traits::Type<_Tp>::value;
2096
template<
typename
_Tp>
inline
2097SparseMat_<_Tp>::SparseMat_(
int
_dims,
const
int* _sizes)
2098
: SparseMat(_dims, _sizes, traits::Type<_Tp>::value)
2101
template<
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);
2110
template<
typename
_Tp>
inline
2111SparseMat_<_Tp>::SparseMat_(
const
SparseMat_<_Tp>& m)
2113
this->flags = m.flags;
2116
CV_XADD(&this->hdr->refcount, 1);
2119
template<
typename
_Tp>
inline
2120SparseMat_<_Tp>::SparseMat_(
const
Mat& m)
2126
template<
typename
_Tp>
inline
2127SparseMat_<_Tp>& SparseMat_<_Tp>::operator = (
const
SparseMat_<_Tp>& m)
2131
if( m.hdr ) CV_XADD(&m.hdr->refcount, 1);
2139
template<
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);
2148
template<
typename
_Tp>
inline
2149SparseMat_<_Tp>& SparseMat_<_Tp>::operator = (
const
Mat& m)
2151
return
(*
this
= SparseMat(m));
2154
template<
typename
_Tp>
inline
2155SparseMat_<_Tp> SparseMat_<_Tp>::clone()
const
2162
template<
typename
_Tp>
inline
2163
void
SparseMat_<_Tp>::create(
int
_dims,
const
int* _sizes)
2165
SparseMat::create(_dims, _sizes, traits::Type<_Tp>::value);
2168
template<
typename
_Tp>
inline
2169
int
SparseMat_<_Tp>::type()
const
2171
return
traits::Type<_Tp>::value;
2174
template<
typename
_Tp>
inline
2175
int
SparseMat_<_Tp>::depth()
const
2177
return
traits::Depth<_Tp>::value;
2180
template<
typename
_Tp>
inline
2181
int
SparseMat_<_Tp>::channels()
const
2183
return
DataType<_Tp>::channels;
2186
template<
typename
_Tp>
inline
2187_Tp& SparseMat_<_Tp>::ref(
int
i0,
size_t* hashval)
2189
return
SparseMat::ref<_Tp>(i0, hashval);
2192
template<
typename
_Tp>
inline
2193_Tp SparseMat_<_Tp>::operator()(
int
i0,
size_t* hashval)
const
2195
return
SparseMat::value<_Tp>(i0, hashval);
2198
template<
typename
_Tp>
inline
2199_Tp& SparseMat_<_Tp>::ref(
int
i0,
int
i1,
size_t* hashval)
2201
return
SparseMat::ref<_Tp>(i0, i1, hashval);
2204
template<
typename
_Tp>
inline
2205_Tp SparseMat_<_Tp>::operator()(
int
i0,
int
i1,
size_t* hashval)
const
2207
return
SparseMat::value<_Tp>(i0, i1, hashval);
2210
template<
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);
2216
template<
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);
2222
template<
typename
_Tp>
inline
2223_Tp& SparseMat_<_Tp>::ref(
const
int* idx,
size_t* hashval)
2225
return
SparseMat::ref<_Tp>(idx, hashval);
2228
template<
typename
_Tp>
inline
2229_Tp SparseMat_<_Tp>::operator()(
const
int* idx,
size_t* hashval)
const
2231
return
SparseMat::value<_Tp>(idx, hashval);
2234
template<
typename
_Tp>
inline
2235SparseMatIterator_<_Tp> SparseMat_<_Tp>::begin()
2237
return
SparseMatIterator_<_Tp>(
this);
2240
template<
typename
_Tp>
inline
2241SparseMatConstIterator_<_Tp> SparseMat_<_Tp>::begin()
const
2243
return
SparseMatConstIterator_<_Tp>(
this);
2246
template<
typename
_Tp>
inline
2247SparseMatIterator_<_Tp> SparseMat_<_Tp>::end()
2249
SparseMatIterator_<_Tp> it(
this);
2254
template<
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;
2333
inline
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 )
2383
inline
MatConstIterator MatConstIterator::operator ++(
int)
2385
MatConstIterator b = *
this;
2392
bool
operator == (
const
MatConstIterator& a,
const
MatConstIterator& b)
2394
return
a.m == b.m && a.ptr == b.ptr;
2398
bool
operator != (
const
MatConstIterator& a,
const
MatConstIterator& b)
2404
bool
operator < (
const
MatConstIterator& a,
const
MatConstIterator& b)
2406
return
a.ptr < b.ptr;
2410
bool
operator > (
const
MatConstIterator& a,
const
MatConstIterator& b)
2412
return
a.ptr > b.ptr;
2416
bool
operator <= (
const
MatConstIterator& a,
const
MatConstIterator& b)
2418
return
a.ptr <= b.ptr;
2422
bool
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;
2461
const
uchar* MatConstIterator::operator [](ptrdiff_t i)
const
2463
return
*(*
this
+ i);
2470
template<
typename
_Tp>
inline
2471MatConstIterator_<_Tp>::MatConstIterator_()
2474
template<
typename
_Tp>
inline
2475MatConstIterator_<_Tp>::MatConstIterator_(
const
Mat_<_Tp>* _m)
2476
: MatConstIterator(_m)
2479
template<
typename
_Tp>
inline
2480MatConstIterator_<_Tp>::MatConstIterator_(
const
Mat_<_Tp>* _m,
int
_row,
int
_col)
2481
: MatConstIterator(_m, _row, _col)
2484
template<
typename
_Tp>
inline
2485MatConstIterator_<_Tp>::MatConstIterator_(
const
Mat_<_Tp>* _m, Point _pt)
2486
: MatConstIterator(_m, _pt)
2489
template<
typename
_Tp>
inline
2490MatConstIterator_<_Tp>::MatConstIterator_(
const
MatConstIterator_& it)
2491
: MatConstIterator(it)
2494
template<
typename
_Tp>
inline
2495MatConstIterator_<_Tp>& MatConstIterator_<_Tp>::operator = (
const
MatConstIterator_& it )
2497
MatConstIterator::operator = (it);
2501
template<
typename
_Tp>
inline
2504
return
*(_Tp*)(this->ptr);
2507
template<
typename
_Tp>
inline
2508MatConstIterator_<_Tp>& MatConstIterator_<_Tp>::operator += (ptrdiff_t ofs)
2510
MatConstIterator::operator += (ofs);
2514
template<
typename
_Tp>
inline
2515MatConstIterator_<_Tp>& MatConstIterator_<_Tp>::operator -= (ptrdiff_t ofs)
2517
return
(*
this
+= -ofs);
2520
template<
typename
_Tp>
inline
2521MatConstIterator_<_Tp>& MatConstIterator_<_Tp>::operator --()
2523
MatConstIterator::operator --();
2527
template<
typename
_Tp>
inline
2528MatConstIterator_<_Tp> MatConstIterator_<_Tp>::operator --(
int)
2530
MatConstIterator_ b = *
this;
2531
MatConstIterator::operator --();
2535
template<
typename
_Tp>
inline
2536MatConstIterator_<_Tp>& MatConstIterator_<_Tp>::operator ++()
2538
MatConstIterator::operator ++();
2542
template<
typename
_Tp>
inline
2543MatConstIterator_<_Tp> MatConstIterator_<_Tp>::operator ++(
int)
2545
MatConstIterator_ b = *
this;
2546
MatConstIterator::operator ++();
2551
template<
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));
2574
template<
typename
_Tp>
static
inline
2575
bool
operator == (
const
MatConstIterator_<_Tp>& a,
const
MatConstIterator_<_Tp>& b)
2577
return
a.m == b.m && a.ptr == b.ptr;
2580
template<
typename
_Tp>
static
inline
2581
bool
operator != (
const
MatConstIterator_<_Tp>& a,
const
MatConstIterator_<_Tp>& b)
2583
return
a.m != b.m || a.ptr != b.ptr;
2586
template<
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;
2593
template<
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;
2600
template<
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;
2607
template<
typename
_Tp>
inline
2608
const
_Tp& MatConstIterator_<_Tp>::operator [](ptrdiff_t i)
const
2610
return
*(_Tp*)MatConstIterator::operator [](i);
2617
template<
typename
_Tp>
inline
2618MatIterator_<_Tp>::MatIterator_()
2619
: MatConstIterator_<_Tp>()
2622
template<
typename
_Tp>
inline
2623MatIterator_<_Tp>::MatIterator_(Mat_<_Tp>* _m)
2624
: MatConstIterator_<_Tp>(_m)
2627
template<
typename
_Tp>
inline
2628MatIterator_<_Tp>::MatIterator_(Mat_<_Tp>* _m,
int
_row,
int
_col)
2629
: MatConstIterator_<_Tp>(_m, _row, _col)
2632
template<
typename
_Tp>
inline
2633MatIterator_<_Tp>::MatIterator_(Mat_<_Tp>* _m, Point _pt)
2634
: MatConstIterator_<_Tp>(_m, _pt)
2637
template<
typename
_Tp>
inline
2638MatIterator_<_Tp>::MatIterator_(Mat_<_Tp>* _m,
const
int* _idx)
2639
: MatConstIterator_<_Tp>(_m, _idx)
2642
template<
typename
_Tp>
inline
2643MatIterator_<_Tp>::MatIterator_(
const
MatIterator_& it)
2644
: MatConstIterator_<_Tp>(it)
2647
template<
typename
_Tp>
inline
2648MatIterator_<_Tp>& MatIterator_<_Tp>::operator = (
const
MatIterator_<_Tp>& it )
2650
MatConstIterator::operator = (it);
2654
template<
typename
_Tp>
inline
2657
return
*(_Tp*)(this->ptr);
2660
template<
typename
_Tp>
inline
2661MatIterator_<_Tp>& MatIterator_<_Tp>::operator += (ptrdiff_t ofs)
2663
MatConstIterator::operator += (ofs);
2667
template<
typename
_Tp>
inline
2668MatIterator_<_Tp>& MatIterator_<_Tp>::operator -= (ptrdiff_t ofs)
2670
MatConstIterator::operator += (-ofs);
2674
template<
typename
_Tp>
inline
2675MatIterator_<_Tp>& MatIterator_<_Tp>::operator --()
2677
MatConstIterator::operator --();
2681
template<
typename
_Tp>
inline
2682MatIterator_<_Tp> MatIterator_<_Tp>::operator --(
int)
2684
MatIterator_ b = *
this;
2685
MatConstIterator::operator --();
2689
template<
typename
_Tp>
inline
2690MatIterator_<_Tp>& MatIterator_<_Tp>::operator ++()
2692
MatConstIterator::operator ++();
2696
template<
typename
_Tp>
inline
2697MatIterator_<_Tp> MatIterator_<_Tp>::operator ++(
int)
2699
MatIterator_ b = *
this;
2700
MatConstIterator::operator ++();
2704
template<
typename
_Tp>
inline
2705_Tp& MatIterator_<_Tp>::operator [](ptrdiff_t i)
const
2707
return
*(*
this
+ i);
2711
template<
typename
_Tp>
static
inline
2712
bool
operator == (
const
MatIterator_<_Tp>& a,
const
MatIterator_<_Tp>& b)
2714
return
a.m == b.m && a.ptr == b.ptr;
2717
template<
typename
_Tp>
static
inline
2718
bool
operator != (
const
MatIterator_<_Tp>& a,
const
MatIterator_<_Tp>& b)
2720
return
a.m != b.m || a.ptr != b.ptr;
2723
template<
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;
2730
template<
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;
2737
template<
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)
2758
inline
SparseMatConstIterator& SparseMatConstIterator::operator = (
const
SparseMatConstIterator& it)
2763
hashidx = it.hashidx;
2769
template<
typename
_Tp>
inline
2770
const
_Tp& SparseMatConstIterator::value()
const
2772
return
*(
const
_Tp*)ptr;
2776
const
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;
2790
void
SparseMatConstIterator::seekEnd()
2794
hashidx = m->hdr->hashtab.size();
2801
bool
operator == (
const
SparseMatConstIterator& it1,
const
SparseMatConstIterator& it2)
2803
return
it1.m == it2.m && it1.ptr == it2.ptr;
2807
bool
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;
2837
template<
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;
2868
template<
typename
_Tp>
inline
2869SparseMatConstIterator_<_Tp>::SparseMatConstIterator_()
2872
template<
typename
_Tp>
inline
2873SparseMatConstIterator_<_Tp>::SparseMatConstIterator_(
const
SparseMat_<_Tp>* _m)
2874
: SparseMatConstIterator(_m)
2877
template<
typename
_Tp>
inline
2878SparseMatConstIterator_<_Tp>::SparseMatConstIterator_(
const
SparseMat* _m)
2879
: SparseMatConstIterator(_m)
2881
CV_Assert( _m->type() == traits::Type<_Tp>::value );
2884
template<
typename
_Tp>
inline
2885SparseMatConstIterator_<_Tp>::SparseMatConstIterator_(
const
SparseMatConstIterator_<_Tp>& it)
2886
: SparseMatConstIterator(it)
2889
template<
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));
2897
template<
typename
_Tp>
inline
2900
return
*(
const
_Tp*)this->ptr;
2903
template<
typename
_Tp>
inline
2904SparseMatConstIterator_<_Tp>& SparseMatConstIterator_<_Tp>::operator ++()
2906
SparseMatConstIterator::operator ++();
2910
template<
typename
_Tp>
inline
2911SparseMatConstIterator_<_Tp> SparseMatConstIterator_<_Tp>::operator ++(
int)
2913
SparseMatConstIterator_<_Tp> it = *
this;
2914
SparseMatConstIterator::operator ++();
2922
template<
typename
_Tp>
inline
2923SparseMatIterator_<_Tp>::SparseMatIterator_()
2926
template<
typename
_Tp>
inline
2927SparseMatIterator_<_Tp>::SparseMatIterator_(SparseMat_<_Tp>* _m)
2928
: SparseMatConstIterator_<_Tp>(_m)
2931
template<
typename
_Tp>
inline
2932SparseMatIterator_<_Tp>::SparseMatIterator_(SparseMat* _m)
2933
: SparseMatConstIterator_<_Tp>(_m)
2936
template<
typename
_Tp>
inline
2937SparseMatIterator_<_Tp>::SparseMatIterator_(
const
SparseMatIterator_<_Tp>& it)
2938
: SparseMatConstIterator_<_Tp>(it)
2941
template<
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));
2949
template<
typename
_Tp>
inline
2952
return
*(_Tp*)this->ptr;
2955
template<
typename
_Tp>
inline
2956SparseMatIterator_<_Tp>& SparseMatIterator_<_Tp>::operator ++()
2958
SparseMatConstIterator::operator ++();
2962
template<
typename
_Tp>
inline
2963SparseMatIterator_<_Tp> SparseMatIterator_<_Tp>::operator ++(
int)
2965
SparseMatIterator_<_Tp> it = *
this;
2966
SparseMatConstIterator::operator ++();
2974
template<
typename
_Tp>
inline
2975MatCommaInitializer_<_Tp>::MatCommaInitializer_(Mat_<_Tp>* _m)
2979
template<
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() );
2988
template<
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);
2996
template<
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);
3014
template<
typename
_Tp>
inline
3015Mat_<_Tp>::Mat_(
const
MatExpr& e)
3017
e.op->assign(e, *
this, traits::Type<_Tp>::value);
3020
template<
typename
_Tp>
inline
3021Mat_<_Tp>& Mat_<_Tp>::operator = (
const
MatExpr& e)
3023
e.op->assign(e, *
this, traits::Type<_Tp>::value);
3027
template<
typename
_Tp>
inline
3028MatExpr Mat_<_Tp>::zeros(
int
rows,
int
cols)
3030
return
Mat::zeros(rows, cols, traits::Type<_Tp>::value);
3033
template<
typename
_Tp>
inline
3034MatExpr Mat_<_Tp>::zeros(Size sz)
3036
return
Mat::zeros(sz, traits::Type<_Tp>::value);
3039
template<
typename
_Tp>
inline
3040MatExpr Mat_<_Tp>::ones(
int
rows,
int
cols)
3042
return
Mat::ones(rows, cols, traits::Type<_Tp>::value);
3045
template<
typename
_Tp>
inline
3046MatExpr Mat_<_Tp>::ones(Size sz)
3048
return
Mat::ones(sz, traits::Type<_Tp>::value);
3051
template<
typename
_Tp>
inline
3052MatExpr Mat_<_Tp>::eye(
int
rows,
int
cols)
3054
return
Mat::eye(rows, cols, traits::Type<_Tp>::value);
3057
template<
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);
3082
template<
typename
_Tp>
inline
3083MatExpr::operator Mat_<_Tp>()
const
3086
op->assign(*
this, m, traits::Type<_Tp>::value);
3091
template<
typename
_Tp>
static
inline
3092MatExpr
min(
const
Mat_<_Tp>& a,
const
Mat_<_Tp>& b)
3094
return
cv::min((
const
Mat&)a, (
const
Mat&)b);
3097
template<
typename
_Tp>
static
inline
3098MatExpr
min(
const
Mat_<_Tp>& a,
double
s)
3100
return
cv::min((
const
Mat&)a, s);
3103
template<
typename
_Tp>
static
inline
3104MatExpr
min(
double
s,
const
Mat_<_Tp>& a)
3106
return
cv::min((
const
Mat&)a, s);
3109
template<
typename
_Tp>
static
inline
3110MatExpr
max(
const
Mat_<_Tp>& a,
const
Mat_<_Tp>& b)
3112
return
cv::max((
const
Mat&)a, (
const
Mat&)b);
3115
template<
typename
_Tp>
static
inline
3116MatExpr
max(
const
Mat_<_Tp>& a,
double
s)
3118
return
cv::max((
const
Mat&)a, s);
3121
template<
typename
_Tp>
static
inline
3122MatExpr
max(
double
s,
const
Mat_<_Tp>& a)
3124
return
cv::max((
const
Mat&)a, s);
3127
template<
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);
3142
const
Mat& operator += (
const
Mat& a,
const
MatExpr& b)
3144
b.op->augAssignAdd(b, (Mat&)a);
3148
template<
typename
_Tp>
static
inline
3149Mat_<_Tp>& operator += (Mat_<_Tp>& a,
const
MatExpr& b)
3151
b.op->augAssignAdd(b, a);
3155
template<
typename
_Tp>
static
inline
3156
const
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);
3170
const
Mat& operator -= (
const
Mat& a,
const
MatExpr& b)
3172
b.op->augAssignSubtract(b, (Mat&)a);
3176
template<
typename
_Tp>
static
inline
3177Mat_<_Tp>& operator -= (Mat_<_Tp>& a,
const
MatExpr& b)
3179
b.op->augAssignSubtract(b, a);
3183
template<
typename
_Tp>
static
inline
3184
const
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);
3198
const
Mat& operator *= (
const
Mat& a,
const
MatExpr& b)
3200
b.op->augAssignMultiply(b, (Mat&)a);
3204
template<
typename
_Tp>
static
inline
3205Mat_<_Tp>& operator *= (Mat_<_Tp>& a,
const
MatExpr& b)
3207
b.op->augAssignMultiply(b, a);
3211
template<
typename
_Tp>
static
inline
3212
const
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);
3226
const
Mat& operator /= (
const
Mat& a,
const
MatExpr& b)
3228
b.op->augAssignDivide(b, (Mat&)a);
3232
template<
typename
_Tp>
static
inline
3233Mat_<_Tp>& operator /= (Mat_<_Tp>& a,
const
MatExpr& b)
3235
b.op->augAssignDivide(b, a);
3239
template<
typename
_Tp>
static
inline
3240
const
Mat_<_Tp>& operator /= (
const
Mat_<_Tp>& a,
const
MatExpr& b)
3242
b.op->augAssignDivide(b, (Mat&)a);
3249
template<
typename
_Tp>
inline
3250UMat::UMat(
const
std::vector<_Tp>& vec,
bool
copyData)
3251: flags(MAGIC_VAL + traits::Type<_Tp>::value + CV_MAT_CONT_FLAG), dims(2), rows((int)vec.size()),
3252cols(1), allocator(0), usageFlags(USAGE_DEFAULT), u(0), offset(0), size(&rows)
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);
3320UMat UMat::operator()(
const
std::vector<Range>& ranges)
const
3322
return
UMat(*
this, ranges);
3326
bool
UMat::isContinuous()
const
3328
return
(flags & CONTINUOUS_FLAG) != 0;
3332
bool
UMat::isSubmatrix()
const
3334
return
(flags & SUBMATRIX_FLAG) != 0;
3338
size_t
UMat::elemSize()
const
3340
size_t
res = dims > 0 ? step.p[dims - 1] : 0;
3346
size_t
UMat::elemSize1()
const
3352
int
UMat::type()
const
3354
return
CV_MAT_TYPE(flags);
3358
int
UMat::depth()
const
3360
return
CV_MAT_DEPTH(flags);
3364
int
UMat::channels()
const
3366
return
CV_MAT_CN(flags);
3370
size_t
UMat::step1(
int
i)
const
3372
return
step.p[i] / elemSize1();
3376
inline
bool
UMatData::hostCopyObsolete()
const
{
return
(flags & HOST_COPY_OBSOLETE) != 0; }
3377
inline
bool
UMatData::deviceCopyObsolete()
const
{
return
(flags & DEVICE_COPY_OBSOLETE) != 0; }
3378
inline
bool
UMatData::deviceMemMapped()
const
{
return
(flags & DEVICE_MEM_MAPPED) != 0; }
3379
inline
bool
UMatData::copyOnMap()
const
{
return
(flags & COPY_ON_MAP) != 0; }
3380
inline
bool
UMatData::tempUMat()
const
{
return
(flags & TEMP_UMAT) != 0; }
3381
inline
bool
UMatData::tempCopiedUMat()
const
{
return
(flags & TEMP_COPIED_UMAT) == TEMP_COPIED_UMAT; }
3383
inline
void
UMatData::markDeviceMemMapped(
bool
flag)
3386
flags |= DEVICE_MEM_MAPPED;
3388
flags &= ~DEVICE_MEM_MAPPED;
3391
inline
void
UMatData::markHostCopyObsolete(
bool
flag)
3394
flags |= HOST_COPY_OBSOLETE;
3396
flags &= ~HOST_COPY_OBSOLETE;
3398
inline
void
UMatData::markDeviceCopyObsolete(
bool
flag)
3401
flags |= DEVICE_COPY_OBSOLETE;
3403
flags &= ~DEVICE_COPY_OBSOLETE;
3409
void
swap(MatExpr& a, MatExpr& b) { a.swap(b); }
3414
#pragma warning( pop )
3417
#ifdef CV_DISABLE_CLANG_ENUM_WARNINGS
3418
#undef CV_DISABLE_CLANG_ENUM_WARNINGS
3419
#pragma clang diagnostic pop
CV_EXPORTS FileStorage & operator<<(FileStorage &fs, const String &str)
Writes string to a file storage.
CV_EXPORTS MatExpr abs(const Mat &m)
Calculates an absolute value of each matrix element.
_Tp height
the height
Definition:
core/types.hpp:340
_Tp width
the width
Definition:
core/types.hpp:339
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)
static _InputArray rawIn(_Tp &v)
static _OutputArray rawOut(_Tp &v)
CV_INLINE v_reg< _Tp, n > operator*(const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b)
Multiply values
CV_INLINE v_reg< _Tp, n > operator+(const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b)
Add values
CV_INLINE v_reg< _Tp, n > operator-(const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b)
Subtract values
#define CV_ELEM_SIZE1(type)
Definition:
cvdef.h:484
#define CV_Error(code, msg)
Call the error handler.
Definition:
base.hpp:320
#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
CV_EXPORTS void swap(Mat &a, Mat &b)
Swaps two matrices
"black box" representation of the file storage associated with a file on disk.
Definition:
aruco.hpp:75