45
#ifndef OPENCV_CORE_OPERATIONS_HPP
46
#define OPENCV_CORE_OPERATIONS_HPP
49
# error operations.hpp header must be compiled as C++
54
#if defined(__GNUC__) || defined(__clang__)
55
# if defined(__MINGW_PRINTF_FORMAT)
56
# define CV_FORMAT_PRINTF(string_idx, first_to_check) __attribute__ ((format (__MINGW_PRINTF_FORMAT, string_idx, first_to_check)))
58
# define CV_FORMAT_PRINTF(string_idx, first_to_check) __attribute__ ((format (printf, string_idx, first_to_check)))
61
# define CV_FORMAT_PRINTF(A, B)
74
template<
typename
_Tp,
int
m,
int
n>
struct
Matx_FastInvOp
76
bool
operator()(
const
Matx<_Tp, m, n>& a, Matx<_Tp, n, m>& b,
int
method)
const
78
return
invert(a, b, method) != 0;
82
template<
typename
_Tp,
int
m>
struct
Matx_FastInvOp<_Tp, m, m>
84
bool
operator()(
const
Matx<_Tp, m, m>& a, Matx<_Tp, m, m>& b,
int
method)
const
88
Matx<_Tp, m, m> temp = a;
91
for
(
int
i = 0; i < m; i++)
95
return
Cholesky(temp.val, m*
sizeof(_Tp), m, b.val, m*
sizeof(_Tp), m);
97
return
LU(temp.val, m*
sizeof(_Tp), m, b.val, m*
sizeof(_Tp), m) != 0;
101
return
invert(a, b, method) != 0;
106
template<
typename
_Tp>
struct
Matx_FastInvOp<_Tp, 2, 2>
108
bool
operator()(
const
Matx<_Tp, 2, 2>& a, Matx<_Tp, 2, 2>& b,
int
)
const
122
template<
typename
_Tp>
struct
Matx_FastInvOp<_Tp, 3, 3>
124
bool
operator()(
const
Matx<_Tp, 3, 3>& a, Matx<_Tp, 3, 3>& b,
int
)
const
130
b(0,0) = (a(1,1) * a(2,2) - a(1,2) * a(2,1)) * d;
131
b(0,1) = (a(0,2) * a(2,1) - a(0,1) * a(2,2)) * d;
132
b(0,2) = (a(0,1) * a(1,2) - a(0,2) * a(1,1)) * d;
134
b(1,0) = (a(1,2) * a(2,0) - a(1,0) * a(2,2)) * d;
135
b(1,1) = (a(0,0) * a(2,2) - a(0,2) * a(2,0)) * d;
136
b(1,2) = (a(0,2) * a(1,0) - a(0,0) * a(1,2)) * d;
138
b(2,0) = (a(1,0) * a(2,1) - a(1,1) * a(2,0)) * d;
139
b(2,1) = (a(0,1) * a(2,0) - a(0,0) * a(2,1)) * d;
140
b(2,2) = (a(0,0) * a(1,1) - a(0,1) * a(1,0)) * d;
146
template<
typename
_Tp,
int
m,
int
l,
int
n>
struct
Matx_FastSolveOp
148
bool
operator()(
const
Matx<_Tp, m, l>& a,
const
Matx<_Tp, m, n>& b,
149
Matx<_Tp, l, n>& x,
int
method)
const
155
template<
typename
_Tp,
int
m,
int
n>
struct
Matx_FastSolveOp<_Tp, m, m, n>
157
bool
operator()(
const
Matx<_Tp, m, m>& a,
const
Matx<_Tp, m, n>& b,
158
Matx<_Tp, m, n>& x,
int
method)
const
162
Matx<_Tp, m, m> temp = a;
165
return
Cholesky(temp.val, m*
sizeof(_Tp), m, x.val, n*
sizeof(_Tp), n);
167
return
LU(temp.val, m*
sizeof(_Tp), m, x.val, n*
sizeof(_Tp), n) != 0;
176
template<
typename
_Tp>
struct
Matx_FastSolveOp<_Tp, 2, 2, 1>
178
bool
operator()(
const
Matx<_Tp, 2, 2>& a,
const
Matx<_Tp, 2, 1>& b,
179
Matx<_Tp, 2, 1>& x,
int)
const
185
x(0) = (b(0)*a(1,1) - b(1)*a(0,1))*d;
186
x(1) = (b(1)*a(0,0) - b(0)*a(1,0))*d;
191
template<
typename
_Tp>
struct
Matx_FastSolveOp<_Tp, 3, 3, 1>
193
bool
operator()(
const
Matx<_Tp, 3, 3>& a,
const
Matx<_Tp, 3, 1>& b,
194
Matx<_Tp, 3, 1>& x,
int)
const
200
x(0) = d*(b(0)*(a(1,1)*a(2,2) - a(1,2)*a(2,1)) -
201
a(0,1)*(b(1)*a(2,2) - a(1,2)*b(2)) +
202
a(0,2)*(b(1)*a(2,1) - a(1,1)*b(2)));
204
x(1) = d*(a(0,0)*(b(1)*a(2,2) - a(1,2)*b(2)) -
205
b(0)*(a(1,0)*a(2,2) - a(1,2)*a(2,0)) +
206
a(0,2)*(a(1,0)*b(2) - b(1)*a(2,0)));
208
x(2) = d*(a(0,0)*(a(1,1)*b(2) - b(1)*a(2,1)) -
209
a(0,1)*(a(1,0)*b(2) - b(1)*a(2,0)) +
210
b(0)*(a(1,0)*a(2,1) - a(1,1)*a(2,0)));
217
template<
typename
_Tp,
int
m,
int
n>
inline
225
template<
typename
_Tp,
int
m,
int
n>
inline
233
template<
typename
_Tp,
int
m,
int
n>
inline
237
bool
ok = cv::internal::Matx_FastInvOp<_Tp, m, n>()(*
this, b, method);
238
if
(p_is_ok) *p_is_ok = ok;
239
return
ok ? b : Matx<_Tp, n, m>::zeros();
242
template<
typename
_Tp,
int
m,
int
n>
template<
int
l>
inline
246
bool
ok = cv::internal::Matx_FastSolveOp<_Tp, m, n, l>()(*
this, rhs, x, method);
247
return
ok ? x : Matx<_Tp, n, l>::zeros();
254
#define CV_MAT_AUG_OPERATOR1(op, cvop, A, B) \
255
static inline A& operator op (A& a, const B& b) { cvop; return a; }
257
#define CV_MAT_AUG_OPERATOR(op, cvop, A, B) \
258
CV_MAT_AUG_OPERATOR1(op, cvop, A, B) \
259
CV_MAT_AUG_OPERATOR1(op, cvop, const A, B)
261
#define CV_MAT_AUG_OPERATOR_T(op, cvop, A, B) \
262
template<typename _Tp> CV_MAT_AUG_OPERATOR1(op, cvop, A, B) \
263
template<typename _Tp> CV_MAT_AUG_OPERATOR1(op, cvop, const A, B)
265
#define CV_MAT_AUG_OPERATOR_TN(op, cvop, A) \
266
template<typename _Tp, int m, int n> static inline A& operator op (A& a, const Matx<_Tp,m,n>& b) { cvop; return a; } \
267
template<typename _Tp, int m, int n> static inline const A& operator op (const A& a, const Matx<_Tp,m,n>& b) { cvop; return a; }
269CV_MAT_AUG_OPERATOR (+=,
cv::add(a, b, (
const
Mat&)a), Mat, Mat)
270CV_MAT_AUG_OPERATOR (+=,
cv::add(a, b, (
const
Mat&)a), Mat, Scalar)
271CV_MAT_AUG_OPERATOR_T(+=,
cv::add(a, b, (
const
Mat&)a), Mat_<_Tp>, Mat)
272CV_MAT_AUG_OPERATOR_T(+=,
cv::add(a, b, (
const
Mat&)a), Mat_<_Tp>, Scalar)
273CV_MAT_AUG_OPERATOR_T(+=,
cv::add(a, b, (
const
Mat&)a), Mat_<_Tp>, Mat_<_Tp>)
274CV_MAT_AUG_OPERATOR_TN(+=,
cv::add(a, Mat(b), (
const
Mat&)a), Mat)
275CV_MAT_AUG_OPERATOR_TN(+=,
cv::add(a, Mat(b), (
const
Mat&)a), Mat_<_Tp>)
277CV_MAT_AUG_OPERATOR (-=,
cv::subtract(a, b, (
const
Mat&)a), Mat, Mat)
278CV_MAT_AUG_OPERATOR (-=,
cv::subtract(a, b, (
const
Mat&)a), Mat, Scalar)
279CV_MAT_AUG_OPERATOR_T(-=,
cv::subtract(a, b, (
const
Mat&)a), Mat_<_Tp>, Mat)
280CV_MAT_AUG_OPERATOR_T(-=,
cv::subtract(a, b, (
const
Mat&)a), Mat_<_Tp>, Scalar)
281CV_MAT_AUG_OPERATOR_T(-=,
cv::subtract(a, b, (
const
Mat&)a), Mat_<_Tp>, Mat_<_Tp>)
282CV_MAT_AUG_OPERATOR_TN(-=,
cv::subtract(a, Mat(b), (
const
Mat&)a), Mat)
283CV_MAT_AUG_OPERATOR_TN(-=,
cv::subtract(a, Mat(b), (
const
Mat&)a), Mat_<_Tp>)
285CV_MAT_AUG_OPERATOR (*=,
cv::gemm(a, b, 1, Mat(), 0, a, 0), Mat, Mat)
286CV_MAT_AUG_OPERATOR_T(*=,
cv::gemm(a, b, 1, Mat(), 0, a, 0), Mat_<_Tp>, Mat)
287CV_MAT_AUG_OPERATOR_T(*=,
cv::gemm(a, b, 1, Mat(), 0, a, 0), Mat_<_Tp>, Mat_<_Tp>)
288CV_MAT_AUG_OPERATOR (*=, a.convertTo(a, -1, b), Mat,
double)
289CV_MAT_AUG_OPERATOR_T(*=, a.convertTo(a, -1, b), Mat_<_Tp>,
double)
290CV_MAT_AUG_OPERATOR_TN(*=,
cv::gemm(a, Mat(b), 1, Mat(), 0, a, 0), Mat)
291CV_MAT_AUG_OPERATOR_TN(*=,
cv::gemm(a, Mat(b), 1, Mat(), 0, a, 0), Mat_<_Tp>)
293CV_MAT_AUG_OPERATOR (/=,
cv::divide(a, b, (
const
Mat&)a), Mat, Mat)
294CV_MAT_AUG_OPERATOR_T(/=,
cv::divide(a, b, (
const
Mat&)a), Mat_<_Tp>, Mat)
295CV_MAT_AUG_OPERATOR_T(/=,
cv::divide(a, b, (
const
Mat&)a), Mat_<_Tp>, Mat_<_Tp>)
296CV_MAT_AUG_OPERATOR (/=, a.convertTo((Mat&)a, -1, 1./b), Mat,
double)
297CV_MAT_AUG_OPERATOR_T(/=, a.convertTo((Mat&)a, -1, 1./b), Mat_<_Tp>,
double)
298CV_MAT_AUG_OPERATOR_TN(/=,
cv::divide(a, Mat(b), (
const
Mat&)a), Mat)
299CV_MAT_AUG_OPERATOR_TN(/=,
cv::divide(a, Mat(b), (
const
Mat&)a), Mat_<_Tp>)
301CV_MAT_AUG_OPERATOR (&=,
cv::bitwise_and(a, b, (
const
Mat&)a), Mat, Mat)
302CV_MAT_AUG_OPERATOR (&=,
cv::bitwise_and(a, b, (
const
Mat&)a), Mat, Scalar)
303CV_MAT_AUG_OPERATOR_T(&=,
cv::bitwise_and(a, b, (
const
Mat&)a), Mat_<_Tp>, Mat)
304CV_MAT_AUG_OPERATOR_T(&=,
cv::bitwise_and(a, b, (
const
Mat&)a), Mat_<_Tp>, Scalar)
305CV_MAT_AUG_OPERATOR_T(&=,
cv::bitwise_and(a, b, (
const
Mat&)a), Mat_<_Tp>, Mat_<_Tp>)
306CV_MAT_AUG_OPERATOR_TN(&=,
cv::bitwise_and(a, Mat(b), (
const
Mat&)a), Mat)
307CV_MAT_AUG_OPERATOR_TN(&=,
cv::bitwise_and(a, Mat(b), (
const
Mat&)a), Mat_<_Tp>)
309CV_MAT_AUG_OPERATOR (|=,
cv::bitwise_or(a, b, (
const
Mat&)a), Mat, Mat)
310CV_MAT_AUG_OPERATOR (|=,
cv::bitwise_or(a, b, (
const
Mat&)a), Mat, Scalar)
311CV_MAT_AUG_OPERATOR_T(|=,
cv::bitwise_or(a, b, (
const
Mat&)a), Mat_<_Tp>, Mat)
312CV_MAT_AUG_OPERATOR_T(|=,
cv::bitwise_or(a, b, (
const
Mat&)a), Mat_<_Tp>, Scalar)
313CV_MAT_AUG_OPERATOR_T(|=,
cv::bitwise_or(a, b, (
const
Mat&)a), Mat_<_Tp>, Mat_<_Tp>)
314CV_MAT_AUG_OPERATOR_TN(|=,
cv::bitwise_or(a, Mat(b), (
const
Mat&)a), Mat)
315CV_MAT_AUG_OPERATOR_TN(|=,
cv::bitwise_or(a, Mat(b), (
const
Mat&)a), Mat_<_Tp>)
317CV_MAT_AUG_OPERATOR (^=,
cv::bitwise_xor(a, b, (
const
Mat&)a), Mat, Mat)
318CV_MAT_AUG_OPERATOR (^=,
cv::bitwise_xor(a, b, (
const
Mat&)a), Mat, Scalar)
319CV_MAT_AUG_OPERATOR_T(^=,
cv::bitwise_xor(a, b, (
const
Mat&)a), Mat_<_Tp>, Mat)
320CV_MAT_AUG_OPERATOR_T(^=,
cv::bitwise_xor(a, b, (
const
Mat&)a), Mat_<_Tp>, Scalar)
321CV_MAT_AUG_OPERATOR_T(^=,
cv::bitwise_xor(a, b, (
const
Mat&)a), Mat_<_Tp>, Mat_<_Tp>)
322CV_MAT_AUG_OPERATOR_TN(^=,
cv::bitwise_xor(a, Mat(b), (
const
Mat&)a), Mat)
323CV_MAT_AUG_OPERATOR_TN(^=,
cv::bitwise_xor(a, Mat(b), (
const
Mat&)a), Mat_<_Tp>)
325
#undef CV_MAT_AUG_OPERATOR_TN
326
#undef CV_MAT_AUG_OPERATOR_T
327
#undef CV_MAT_AUG_OPERATOR
328
#undef CV_MAT_AUG_OPERATOR1
336
inline
void
SVD::solveZ( InputArray m, OutputArray _dst )
338
Mat mtx = m.getMat();
340
_dst.create(svd.vt.cols, 1, svd.vt.type());
341
Mat dst = _dst.getMat();
342
svd.vt.row(svd.vt.rows-1).reshape(1,svd.vt.cols).copyTo(dst);
345
template<
typename
_Tp,
int
m,
int
n,
int
nm>
inline
void
346
SVD::compute(
const
Matx<_Tp, m, n>& a, Matx<_Tp, nm, 1>& w, Matx<_Tp, m, nm>& u, Matx<_Tp, n, nm>& vt )
348
CV_StaticAssert( nm == MIN(m, n),
"Invalid size of output vector.");
349
Mat _a(a,
false), _u(u,
false), _w(w,
false), _vt(vt,
false);
351
CV_Assert(_w.data == (uchar*)&w.val[0] && _u.data == (uchar*)&u.val[0] && _vt.data == (uchar*)&vt.val[0]);
354
template<
typename
_Tp,
int
m,
int
n,
int
nm>
inline
void
355
SVD::compute(
const
Matx<_Tp, m, n>& a, Matx<_Tp, nm, 1>& w )
357
CV_StaticAssert( nm == MIN(m, n),
"Invalid size of output vector.");
358
Mat _a(a,
false), _w(w,
false);
363
template<
typename
_Tp,
int
m,
int
n,
int
nm,
int
nb>
inline
void
364
SVD::backSubst(
const
Matx<_Tp, nm, 1>& w,
const
Matx<_Tp, m, nm>& u,
365
const
Matx<_Tp, n, nm>& vt,
const
Matx<_Tp, m, nb>& rhs,
366
Matx<_Tp, n, nb>& dst )
368
CV_StaticAssert( nm == MIN(m, n),
"Invalid size of output vector.");
369
Mat _u(u,
false), _w(w,
false), _vt(vt,
false), _rhs(rhs,
false), _dst(dst,
false);
371
CV_Assert(_dst.data == (uchar*)&dst.val[0]);
378
inline
RNG::RNG() { state = 0xffffffff; }
379
inline
RNG::RNG(uint64 _state) { state = _state ? _state : 0xffffffff; }
381
inline
RNG::operator uchar() {
return
(uchar)next(); }
382
inline
RNG::operator schar() {
return
(schar)next(); }
383
inline
RNG::operator ushort() {
return
(ushort)next(); }
384
inline
RNG::operator short() {
return
(
short)next(); }
385
inline
RNG::operator int() {
return
(
int)next(); }
386
inline
RNG::operator unsigned() {
return
next(); }
387
inline
RNG::operator float() {
return
next()*2.3283064365386962890625e-10f; }
388
inline
RNG::operator double() {
unsigned
t = next();
return
(((uint64)t << 32) | next()) * 5.4210108624275221700372640043497e-20; }
393
inline
int
RNG::uniform(
int
a,
int
b) {
return
a == b ? a : (int)(
next() % (b - a) + a); }
394
inline
float
RNG::uniform(
float
a,
float
b) {
return
((
float)*
this)*(b - a) + a; }
395
inline
double
RNG::uniform(
double
a,
double
b) {
return
((
double)*
this)*(b - a) + a; }
397
inline
bool
RNG::operator ==(
const
RNG& other)
const
{
return
state == other.state; }
401
state = (uint64)(
unsigned)state*
4164903690U + (unsigned)(state >> 32);
402
return
(
unsigned)state;
406
template<
typename
_Tp>
static
inline
_Tp
randu()
430CV_EXPORTS String format(
const
char* fmt, ... ) CV_FORMAT_PRINTF(1, 2);
435Ptr<Formatted> format(InputArray mtx, Formatter::FormatType fmt)
437
return
Formatter::get(fmt)->format(mtx.getMat());
441
int
print(Ptr<Formatted> fmtd, FILE* stream = stdout)
445
for(
const
char* str = fmtd->next(); str; str = fmtd->next())
446
written += fputs(str, stream);
452
int
print(
const
Mat& mtx, FILE* stream = stdout)
454
return
print(Formatter::get()->format(mtx), stream);
458
int
print(
const
UMat& mtx, FILE* stream = stdout)
460
return
print(Formatter::get()->format(mtx.getMat(ACCESS_READ)), stream);
463
template<
typename
_Tp>
static
inline
464
int
print(
const
std::vector<Point_<_Tp> >& vec, FILE* stream = stdout)
466
return
print(Formatter::get()->format(Mat(vec)), stream);
469
template<
typename
_Tp>
static
inline
470
int
print(
const
std::vector<Point3_<_Tp> >& vec, FILE* stream = stdout)
472
return
print(Formatter::get()->format(Mat(vec)), stream);
475
template<
typename
_Tp,
int
m,
int
n>
static
inline
476
int
print(
const
Matx<_Tp, m, n>& matx, FILE* stream = stdout)
478
return
print(Formatter::get()->format(
cv::Mat(matx)), stream);
502
template<
typename
_Tp,
class
_EqPredicate>
int
503
partition(
const
std::vector<_Tp>& _vec, std::vector<int>& labels,
504
_EqPredicate predicate=_EqPredicate())
506
int
i, j, N = (int)_vec.size();
507
const
_Tp* vec = &_vec[0];
512
std::vector<int> _nodes(N*2);
513
int (*nodes)[2] = (int(*)[2])&_nodes[0];
516
for(i = 0; i < N; i++)
523
for( i = 0; i < N; i++ )
528
while( nodes[root][PARENT] >= 0 )
529
root = nodes[root][PARENT];
531
for( j = 0; j < N; j++ )
533
if( i == j || !predicate(vec[i], vec[j]))
537
while( nodes[root2][PARENT] >= 0 )
538
root2 = nodes[root2][PARENT];
543
int
rank = nodes[root][RANK], rank2 = nodes[root2][RANK];
545
nodes[root2][PARENT] = root;
548
nodes[root][PARENT] = root2;
549
nodes[root2][RANK] += rank == rank2;
557
while( (parent = nodes[k][PARENT]) >= 0 )
559
nodes[k][PARENT] = root;
565
while( (parent = nodes[k][PARENT]) >= 0 )
567
nodes[k][PARENT] = root;
578
for( i = 0; i < N; i++ )
581
while( nodes[root][PARENT] >= 0 )
582
root = nodes[root][PARENT];
584
if( nodes[root][RANK] >= 0 )
585
nodes[root][RANK] = ~nclasses++;
586
labels[i] = ~nodes[root][RANK];
n-dimensional dense array class
Definition:
mat.hpp:802
static Matx randn(_Tp a, _Tp b)
Generates normally distributed random numbers
Matx< _Tp, n, m > inv(int method=DECOMP_LU, bool *p_is_ok=NULL) const
invert the matrix
static Matx randu(_Tp a, _Tp b)
Generates uniformly distributed random numbers
Matx< _Tp, n, l > solve(const Matx< _Tp, m, l > &rhs, int flags=DECOMP_LU) const
solve linear system
unsigned operator()()
returns a random integer sampled uniformly from [0, N).
int uniform(int a, int b)
returns uniformly distributed integer random number from [a,b) range
SVD()
the default constructor
@ FULL_UV
Definition:
core.hpp:2656
static void compute(InputArray src, OutputArray w, OutputArray u, OutputArray vt, int flags=0)
decomposes matrix and stores the results to user-provided matrices
static void backSubst(InputArray w, InputArray u, InputArray vt, InputArray rhs, OutputArray dst)
performs back substitution
static void solveZ(InputArray src, OutputArray dst)
solves an under-determined singular linear system
SVD & operator()(InputArray src, int flags=0)
the operator that performs SVD. The previously allocated u, w and vt are released.
CV_EXPORTS_W void bitwise_xor(InputArray src1, InputArray src2, OutputArray dst, InputArray mask=noArray())
Calculates the per-element bit-wise "exclusive or" operation on two arrays or an array and a scalar.
CV_EXPORTS_W void gemm(InputArray src1, InputArray src2, double alpha, InputArray src3, double beta, OutputArray dst, int flags=0)
Performs generalized matrix multiplication.
CV_EXPORTS RNG & theRNG()
Returns the default random number generator.
CV_EXPORTS_W void bitwise_or(InputArray src1, InputArray src2, OutputArray dst, InputArray mask=noArray())
Calculates the per-element bit-wise disjunction of two arrays or an array and a scalar.
CV_EXPORTS_W double invert(InputArray src, OutputArray dst, int flags=DECOMP_LU)
Finds the inverse or pseudo-inverse of a matrix.
CV_EXPORTS_W bool solve(InputArray src1, InputArray src2, OutputArray dst, int flags=DECOMP_LU)
Solves one or more linear systems or least-squares problems.
CV_EXPORTS_W void randu(InputOutputArray dst, InputArray low, InputArray high)
Generates a single uniformly-distributed random number or an array of random numbers.
CV_EXPORTS_W void add(InputArray src1, InputArray src2, OutputArray dst, InputArray mask=noArray(), int dtype=-1)
Calculates the per-element sum of two arrays or an array and a scalar.
CV_EXPORTS_W void divide(InputArray src1, InputArray src2, OutputArray dst, double scale=1, int dtype=-1)
Performs per-element division of two arrays or a scalar by an array.
CV_EXPORTS_W void bitwise_and(InputArray src1, InputArray src2, OutputArray dst, InputArray mask=noArray())
computes bitwise conjunction of the two arrays (dst = src1 & src2) Calculates the per-element bit-wis...
CV_EXPORTS_W double determinant(InputArray mtx)
Returns the determinant of a square floating-point matrix.
CV_EXPORTS_W void randn(InputOutputArray dst, InputArray mean, InputArray stddev)
Fills the array with normally distributed random numbers.
CV_EXPORTS_W void subtract(InputArray src1, InputArray src2, OutputArray dst, InputArray mask=noArray(), int dtype=-1)
Calculates the per-element difference between two arrays or array and a scalar.
@ DECOMP_LU
Definition:
base.hpp:135
@ DECOMP_CHOLESKY
Definition:
base.hpp:143
int partition(const std::vector< _Tp > &_vec, std::vector< int > &labels, _EqPredicate predicate=_EqPredicate())
Splits an element set into equivalency classes.
Definition:
operations.hpp:503
CV_EXPORTS int LU(float *A, size_t astep, int m, float *b, size_t bstep, int n)
CV_EXPORTS bool Cholesky(float *A, size_t astep, int m, float *b, size_t bstep, int n)
#define CV_Assert(expr)
Checks a condition at runtime and throws exception if it fails
Definition:
base.hpp:342
"black box" representation of the file storage associated with a file on disk.
Definition:
aruco.hpp:75