CLAHE Python bindings
[profile/ivi/opencv.git] / modules / core / doc / operations_on_arrays.rst
1 Operations on Arrays
2 ====================
3
4 .. highlight:: cpp
5
6 abs
7 ---
8 Calculates an absolute value of each matrix element.
9
10 .. ocv:function:: MatExpr abs( const Mat& m )
11 .. ocv:function:: MatExpr abs( const MatExpr& e )
12
13     :param m: matrix.
14     :param e: matrix expression.
15
16 ``abs`` is a meta-function that is expanded to one of :ocv:func:`absdiff` or :ocv:func:`convertScaleAbs` forms:
17
18     * ``C = abs(A-B)``     is equivalent to ``absdiff(A, B, C)``
19
20     * ``C = abs(A)``     is equivalent to ``absdiff(A, Scalar::all(0), C)``
21
22     * ``C = Mat_<Vec<uchar,n> >(abs(A*alpha + beta))``     is equivalent to  ``convertScaleAbs(A, C, alpha, beta)``
23
24 The output matrix has the same size and the same type as the input one except for the last case, where ``C`` is ``depth=CV_8U`` .
25
26     .. seealso:: :ref:`MatrixExpressions`, :ocv:func:`absdiff`, :ocv:func:`convertScaleAbs`
27
28
29 absdiff
30 -------
31 Calculates the per-element absolute difference between two arrays or between an array and a scalar.
32
33 .. ocv:function:: void absdiff(InputArray src1, InputArray src2, OutputArray dst)
34
35 .. ocv:pyfunction:: cv2.absdiff(src1, src2[, dst]) -> dst
36
37 .. ocv:cfunction:: void cvAbsDiff(const CvArr* src1, const CvArr* src2, CvArr* dst)
38 .. ocv:cfunction:: void cvAbsDiffS(const CvArr* src, CvArr* dst, CvScalar value)
39 .. ocv:pyoldfunction:: cv.AbsDiff(src1, src2, dst)-> None
40 .. ocv:pyoldfunction:: cv.AbsDiffS(src, dst, value)-> None
41
42     :param src1: first input array or a scalar.
43
44     :param src2: second input array or a scalar.
45
46     :param src: single input array.
47
48     :param value: scalar value.
49
50     :param dst: output array that has the same size and type as input arrays.
51
52 The function ``absdiff`` calculates:
53
54  *
55     Absolute difference between two arrays when they have the same size and type:
56
57     .. math::
58
59         \texttt{dst}(I) =  \texttt{saturate} (| \texttt{src1}(I) -  \texttt{src2}(I)|)
60
61  *
62     Absolute difference between an array and a scalar when the second array is constructed from ``Scalar`` or has as many elements as the number of channels in ``src1``:
63
64     .. math::
65
66         \texttt{dst}(I) =  \texttt{saturate} (| \texttt{src1}(I) -  \texttt{src2} |)
67
68  *
69     Absolute difference between a scalar and an array when the first array is constructed from ``Scalar`` or has as many elements as the number of channels in ``src2``:
70
71     .. math::
72
73         \texttt{dst}(I) =  \texttt{saturate} (| \texttt{src1} -  \texttt{src2}(I) |)
74
75     where  ``I`` is a multi-dimensional index of array elements. In case of multi-channel arrays, each channel is processed independently.
76
77 .. note:: Saturation is not applied when the arrays have the depth ``CV_32S``. You may even get a negative value in the case of overflow.
78
79 .. seealso:: :ocv:func:`abs`
80
81
82 add
83 ---
84
85 Calculates the per-element sum of two arrays or an array and a scalar.
86
87 .. ocv:function:: void add(InputArray src1, InputArray src2, OutputArray dst, InputArray mask=noArray(), int dtype=-1)
88
89 .. ocv:pyfunction:: cv2.add(src1, src2[, dst[, mask[, dtype]]]) -> dst
90
91 .. ocv:cfunction:: void cvAdd(const CvArr* src1, const CvArr* src2, CvArr* dst, const CvArr* mask=NULL)
92 .. ocv:cfunction:: void cvAddS(const CvArr* src, CvScalar value, CvArr* dst, const CvArr* mask=NULL)
93 .. ocv:pyoldfunction:: cv.Add(src1, src2, dst, mask=None)-> None
94 .. ocv:pyoldfunction:: cv.AddS(src, value, dst, mask=None)-> None
95
96     :param src1: first input array or a scalar.
97
98     :param src2: second input array or a scalar.
99
100     :param src: single input array.
101
102     :param value: scalar value.
103
104     :param dst: output array that has the same size and number of channels as the input array(s); the depth is defined by ``dtype`` or ``src1``/``src2``.
105
106     :param mask: optional operation mask - 8-bit single channel array, that specifies elements of the output array to be changed.
107
108     :param dtype: optional depth of the output array (see the discussion below).
109
110 The function ``add`` calculates:
111
112  *
113     Sum of two arrays when both input arrays have the same size and the same number of channels:
114
115     .. math::
116
117         \texttt{dst}(I) =  \texttt{saturate} ( \texttt{src1}(I) +  \texttt{src2}(I)) \quad \texttt{if mask}(I) \ne0
118
119  *
120     Sum of an array and a scalar when ``src2`` is constructed from ``Scalar`` or has the same number of elements as ``src1.channels()``:
121
122     .. math::
123
124         \texttt{dst}(I) =  \texttt{saturate} ( \texttt{src1}(I) +  \texttt{src2} ) \quad \texttt{if mask}(I) \ne0
125
126  *
127     Sum of a scalar and an array when ``src1`` is constructed from ``Scalar`` or has the same number of elements as ``src2.channels()``:
128
129     .. math::
130
131         \texttt{dst}(I) =  \texttt{saturate} ( \texttt{src1} +  \texttt{src2}(I) ) \quad \texttt{if mask}(I) \ne0
132
133     where ``I`` is a multi-dimensional index of array elements. In case of multi-channel arrays, each channel is processed independently.
134
135 The first function in the list above can be replaced with matrix expressions: ::
136
137     dst = src1 + src2;
138     dst += src1; // equivalent to add(dst, src1, dst);
139
140 The input arrays and the output array can all have the same or different depths. For example, you can add a 16-bit unsigned array to a 8-bit signed array and store the sum as a 32-bit floating-point array. Depth of the output array is determined by the ``dtype`` parameter. In the second and third cases above, as well as in the first case, when ``src1.depth() == src2.depth()``, ``dtype`` can be set to the default ``-1``. In this case, the output array will have the same depth as the input array, be it ``src1``, ``src2`` or both.
141
142 .. note:: Saturation is not applied when the output array has the depth ``CV_32S``. You may even get result of an incorrect sign in the case of overflow.
143
144 .. seealso::
145
146     :ocv:func:`subtract`,
147     :ocv:func:`addWeighted`,
148     :ocv:func:`scaleAdd`,
149     :ocv:func:`Mat::convertTo`,
150     :ref:`MatrixExpressions`
151
152
153
154 addWeighted
155 -----------
156 Calculates the weighted sum of two arrays.
157
158 .. ocv:function:: void addWeighted(InputArray src1, double alpha, InputArray src2, double beta, double gamma, OutputArray dst, int dtype=-1)
159
160 .. ocv:pyfunction:: cv2.addWeighted(src1, alpha, src2, beta, gamma[, dst[, dtype]]) -> dst
161
162 .. ocv:cfunction:: void cvAddWeighted(const CvArr* src1, double alpha, const CvArr* src2, double beta, double gamma, CvArr* dst)
163 .. ocv:pyoldfunction:: cv.AddWeighted(src1, alpha, src2, beta, gamma, dst)-> None
164
165     :param src1: first input array.
166
167     :param alpha: weight of the first array elements.
168
169     :param src2: second input array of the same size and channel number as  ``src1``.
170
171     :param beta: weight of the second array elements.
172
173     :param dst: output array that has the same size and number of channels as the input arrays.
174
175     :param gamma: scalar added to each sum.
176
177     :param dtype: optional depth of the output array; when both input arrays have the same depth, ``dtype`` can be set to ``-1``, which will be equivalent to ``src1.depth()``.
178
179 The function ``addWeighted`` calculates the weighted sum of two arrays as follows:
180
181 .. math::
182
183     \texttt{dst} (I)= \texttt{saturate} ( \texttt{src1} (I)* \texttt{alpha} +  \texttt{src2} (I)* \texttt{beta} +  \texttt{gamma} )
184
185 where ``I`` is a multi-dimensional index of array elements. In case of multi-channel arrays, each channel is processed independently.
186
187 The function can be replaced with a matrix expression: ::
188
189     dst = src1*alpha + src2*beta + gamma;
190
191 .. note:: Saturation is not applied when the output array has the depth ``CV_32S``. You may even get result of an incorrect sign in the case of overflow.
192
193 .. seealso::
194
195     :ocv:func:`add`,
196     :ocv:func:`subtract`,
197     :ocv:func:`scaleAdd`,
198     :ocv:func:`Mat::convertTo`,
199     :ref:`MatrixExpressions`
200
201
202
203 bitwise_and
204 -----------
205 Calculates the per-element bit-wise conjunction of two arrays or an array and a scalar.
206
207 .. ocv:function:: void bitwise_and(InputArray src1, InputArray src2, OutputArray dst, InputArray mask=noArray())
208
209 .. ocv:pyfunction:: cv2.bitwise_and(src1, src2[, dst[, mask]]) -> dst
210
211 .. ocv:cfunction:: void cvAnd(const CvArr* src1, const CvArr* src2, CvArr* dst, const CvArr* mask=NULL)
212 .. ocv:cfunction:: void cvAndS(const CvArr* src, CvScalar value, CvArr* dst, const CvArr* mask=NULL)
213 .. ocv:pyoldfunction:: cv.And(src1, src2, dst, mask=None)-> None
214 .. ocv:pyoldfunction:: cv.AndS(src, value, dst, mask=None)-> None
215
216     :param src1: first input array or a scalar.
217
218     :param src2: second input array or a scalar.
219
220     :param src: single input array.
221
222     :param value: scalar value.
223
224     :param dst: output array that has the same size and type as the input arrays.
225
226     :param mask: optional operation mask, 8-bit single channel array, that specifies elements of the output array to be changed.
227
228 The function calculates the per-element bit-wise logical conjunction for:
229
230  *
231     Two arrays when ``src1`` and ``src2`` have the same size:
232
233     .. math::
234
235         \texttt{dst} (I) =  \texttt{src1} (I)  \wedge \texttt{src2} (I) \quad \texttt{if mask} (I) \ne0
236
237  *
238     An array and a scalar when ``src2`` is constructed from ``Scalar`` or has the same number of elements as ``src1.channels()``:
239
240     .. math::
241
242         \texttt{dst} (I) =  \texttt{src1} (I)  \wedge \texttt{src2} \quad \texttt{if mask} (I) \ne0
243
244  *
245     A scalar and an array when ``src1`` is constructed from ``Scalar`` or has the same number of elements as ``src2.channels()``:
246
247     .. math::
248
249         \texttt{dst} (I) =  \texttt{src1}  \wedge \texttt{src2} (I) \quad \texttt{if mask} (I) \ne0
250
251
252 In case of floating-point arrays, their machine-specific bit representations (usually IEEE754-compliant) are used for the operation. In case of multi-channel arrays, each channel is processed independently. In the second and third cases above, the scalar is first converted to the array type.
253
254
255
256 bitwise_not
257 -----------
258 Inverts every bit of an array.
259
260 .. ocv:function:: void bitwise_not(InputArray src, OutputArray dst, InputArray mask=noArray())
261
262 .. ocv:pyfunction:: cv2.bitwise_not(src[, dst[, mask]]) -> dst
263
264 .. ocv:cfunction:: void cvNot(const CvArr* src, CvArr* dst)
265 .. ocv:pyoldfunction:: cv.Not(src, dst)-> None
266
267     :param src: input array.
268
269     :param dst: output array that has the same size and type as the input array.
270
271     :param mask: optional operation mask, 8-bit single channel array, that specifies elements of the output array to be changed.
272
273 The function calculates per-element bit-wise inversion of the input array:
274
275 .. math::
276
277     \texttt{dst} (I) =  \neg \texttt{src} (I)
278
279 In case of a floating-point input array, its machine-specific bit representation (usually IEEE754-compliant) is used for the operation. In case of multi-channel arrays, each channel is processed independently.
280
281
282
283 bitwise_or
284 ----------
285 Calculates the per-element bit-wise disjunction of two arrays or an array and a scalar.
286
287 .. ocv:function:: void bitwise_or(InputArray src1, InputArray src2, OutputArray dst, InputArray mask=noArray())
288
289 .. ocv:pyfunction:: cv2.bitwise_or(src1, src2[, dst[, mask]]) -> dst
290
291 .. ocv:cfunction:: void cvOr(const CvArr* src1, const CvArr* src2, CvArr* dst, const CvArr* mask=NULL)
292 .. ocv:cfunction:: void cvOrS(const CvArr* src, CvScalar value, CvArr* dst, const CvArr* mask=NULL)
293 .. ocv:pyoldfunction:: cv.Or(src1, src2, dst, mask=None)-> None
294 .. ocv:pyoldfunction:: cv.OrS(src, value, dst, mask=None)-> None
295
296     :param src1: first input array or a scalar.
297
298     :param src2: second input array or a scalar.
299
300     :param src: single input array.
301
302     :param value: scalar value.
303
304     :param dst: output array that has the same size and type as the input arrays.
305
306     :param mask: optional operation mask, 8-bit single channel array, that specifies elements of the output array to be changed.
307
308 The function calculates the per-element bit-wise logical disjunction for:
309
310  *
311     Two arrays when ``src1`` and ``src2`` have the same size:
312
313         .. math::
314
315             \texttt{dst} (I) =  \texttt{src1} (I)  \vee \texttt{src2} (I) \quad \texttt{if mask} (I) \ne0
316
317  *
318     An array and a scalar when ``src2`` is constructed from ``Scalar`` or has the same number of elements as ``src1.channels()``:
319
320         .. math::
321
322             \texttt{dst} (I) =  \texttt{src1} (I)  \vee \texttt{src2} \quad \texttt{if mask} (I) \ne0
323
324  *
325     A scalar and an array when ``src1`` is constructed from ``Scalar`` or has the same number of elements as ``src2.channels()``:
326
327         .. math::
328
329             \texttt{dst} (I) =  \texttt{src1}  \vee \texttt{src2} (I) \quad \texttt{if mask} (I) \ne0
330
331
332 In case of floating-point arrays, their machine-specific bit representations (usually IEEE754-compliant) are used for the operation. In case of multi-channel arrays, each channel is processed independently. In the second and third cases above, the scalar is first converted to the array type.
333
334
335 bitwise_xor
336 -----------
337 Calculates the per-element bit-wise "exclusive or" operation on two arrays or an array and a scalar.
338
339 .. ocv:function:: void bitwise_xor(InputArray src1, InputArray src2, OutputArray dst, InputArray mask=noArray())
340
341 .. ocv:pyfunction:: cv2.bitwise_xor(src1, src2[, dst[, mask]]) -> dst
342
343 .. ocv:cfunction:: void cvXor(const CvArr* src1, const CvArr* src2, CvArr* dst, const CvArr* mask=NULL)
344 .. ocv:cfunction:: void cvXorS(const CvArr* src, CvScalar value, CvArr* dst, const CvArr* mask=NULL)
345 .. ocv:pyoldfunction:: cv.Xor(src1, src2, dst, mask=None)-> None
346 .. ocv:pyoldfunction:: cv.XorS(src, value, dst, mask=None)-> None
347
348     :param src1: first input array or a scalar.
349
350     :param src2: second input array or a scalar.
351
352     :param src: single input array.
353
354     :param value: scalar value.
355
356     :param dst: output array that has the same size and type as the input arrays.
357
358     :param mask: optional operation mask, 8-bit single channel array, that specifies elements of the output array to be changed.
359
360 The function calculates the per-element bit-wise logical "exclusive-or" operation for:
361
362  *
363     Two arrays when ``src1`` and ``src2`` have the same size:
364
365         .. math::
366
367             \texttt{dst} (I) =  \texttt{src1} (I)  \oplus \texttt{src2} (I) \quad \texttt{if mask} (I) \ne0
368
369  *
370     An array and a scalar when ``src2`` is constructed from ``Scalar`` or has the same number of elements as ``src1.channels()``:
371
372         .. math::
373
374             \texttt{dst} (I) =  \texttt{src1} (I)  \oplus \texttt{src2} \quad \texttt{if mask} (I) \ne0
375
376  *
377     A scalar and an array when ``src1`` is constructed from ``Scalar`` or has the same number of elements as ``src2.channels()``:
378
379         .. math::
380
381             \texttt{dst} (I) =  \texttt{src1}  \oplus \texttt{src2} (I) \quad \texttt{if mask} (I) \ne0
382
383
384 In case of floating-point arrays, their machine-specific bit representations (usually IEEE754-compliant) are used for the operation. In case of multi-channel arrays, each channel is processed independently. In the 2nd and 3rd cases above, the scalar is first converted to the array type.
385
386
387 calcCovarMatrix
388 ---------------
389 Calculates the covariance matrix of a set of vectors.
390
391 .. ocv:function:: void calcCovarMatrix( const Mat* samples, int nsamples, Mat& covar, Mat& mean, int flags, int ctype=CV_64F)
392
393 .. ocv:function:: void calcCovarMatrix( InputArray samples, OutputArray covar, OutputArray mean, int flags, int ctype=CV_64F)
394
395 .. ocv:pyfunction:: cv2.calcCovarMatrix(samples, flags[, covar[, mean[, ctype]]]) -> covar, mean
396
397 .. ocv:cfunction:: void cvCalcCovarMatrix( const CvArr** vects, int count, CvArr* cov_mat, CvArr* avg, int flags )
398
399 .. ocv:pyoldfunction:: cv.CalcCovarMatrix(vects, covMat, avg, flags)-> None
400
401     :param samples: samples stored either as separate matrices or as rows/columns of a single matrix.
402
403     :param nsamples: number of samples when they are stored separately.
404
405     :param covar: output covariance matrix of the type ``ctype`` and square size.
406
407     :param ctype: type of the matrixl; it equals 'CV_64F' by default.
408
409     :param mean: input or output (depending on the flags) array as the average value of the input vectors.
410
411     :param vects: a set of vectors.
412
413     :param flags: operation flags as a combination of the following values:
414
415             * **CV_COVAR_SCRAMBLED** The output covariance matrix is calculated as:
416
417                 .. math::
418
419                       \texttt{scale}   \cdot  [  \texttt{vects}  [0]-  \texttt{mean}  , \texttt{vects}  [1]-  \texttt{mean}  ,...]^T  \cdot  [ \texttt{vects}  [0]- \texttt{mean}  , \texttt{vects}  [1]- \texttt{mean}  ,...],
420
421                 The covariance matrix will be  ``nsamples x nsamples``. Such an unusual covariance matrix is used for fast PCA of a set of very large vectors (see, for example, the EigenFaces technique for face recognition). Eigenvalues of this "scrambled" matrix match the eigenvalues of the true covariance matrix. The "true" eigenvectors can be easily calculated from the eigenvectors of the "scrambled" covariance matrix.
422
423             * **CV_COVAR_NORMAL** The output covariance matrix is calculated as:
424
425                 .. math::
426
427                       \texttt{scale}   \cdot  [  \texttt{vects}  [0]-  \texttt{mean}  , \texttt{vects}  [1]-  \texttt{mean}  ,...]  \cdot  [ \texttt{vects}  [0]- \texttt{mean}  , \texttt{vects}  [1]- \texttt{mean}  ,...]^T,
428
429                 ``covar``  will be a square matrix of the same size as the total number of elements in each input vector. One and only one of  ``CV_COVAR_SCRAMBLED``  and ``CV_COVAR_NORMAL``  must be specified.
430
431             * **CV_COVAR_USE_AVG** If the flag is specified, the function does not calculate  ``mean``  from the input vectors but, instead, uses the passed  ``mean``  vector. This is useful if  ``mean``  has been pre-calculated or known in advance, or if the covariance matrix is calculated by parts. In this case, ``mean``  is not a mean vector of the input sub-set of vectors but rather the mean vector of the whole set.
432
433             * **CV_COVAR_SCALE** If the flag is specified, the covariance matrix is scaled. In the "normal" mode,  ``scale``  is  ``1./nsamples`` . In the "scrambled" mode,  ``scale``  is the reciprocal of the total number of elements in each input vector. By default (if the flag is not specified), the covariance matrix is not scaled (  ``scale=1`` ).
434
435             * **CV_COVAR_ROWS** [Only useful in the second variant of the function] If the flag is specified, all the input vectors are stored as rows of the  ``samples``  matrix.  ``mean``  should be a single-row vector in this case.
436
437             * **CV_COVAR_COLS** [Only useful in the second variant of the function] If the flag is specified, all the input vectors are stored as columns of the  ``samples``  matrix.  ``mean``  should be a single-column vector in this case.
438
439 The functions ``calcCovarMatrix`` calculate the covariance matrix and, optionally, the mean vector of the set of input vectors.
440
441 .. seealso::
442
443     :ocv:class:`PCA`,
444     :ocv:func:`mulTransposed`,
445     :ocv:func:`Mahalanobis`
446
447
448
449 cartToPolar
450 -----------
451 Calculates the magnitude and angle of 2D vectors.
452
453 .. ocv:function:: void cartToPolar(InputArray x, InputArray y, OutputArray magnitude, OutputArray angle, bool angleInDegrees=false)
454
455 .. ocv:pyfunction:: cv2.cartToPolar(x, y[, magnitude[, angle[, angleInDegrees]]]) -> magnitude, angle
456
457 .. ocv:cfunction:: void cvCartToPolar( const CvArr* x, const CvArr* y, CvArr* magnitude, CvArr* angle=NULL, int angle_in_degrees=0 )
458
459 .. ocv:pyoldfunction:: cv.CartToPolar(x, y, magnitude, angle=None, angleInDegrees=0)-> None
460
461     :param x: array of x-coordinates; this must be a single-precision or double-precision floating-point array.
462
463     :param y: array of y-coordinates, that must have the same size and same type as ``x``.
464
465     :param magnitude: output array of magnitudes of the same size and type as ``x``.
466
467     :param angle: output array of angles that has the same size and type as ``x``; the angles are measured in radians (from 0 to 2*Pi) or in degrees (0 to 360 degrees).
468
469     :param angleInDegrees: a flag, indicating whether the angles are measured in radians (which is by default), or in degrees.
470
471     :param angle_in_degrees: a flag, indicating whether the angles are measured in radians, or in degrees (specific to C syntax).
472
473 The function ``cartToPolar`` calculates either the magnitude, angle, or both for every 2D vector (x(I),y(I)):
474
475 .. math::
476
477     \begin{array}{l} \texttt{magnitude} (I)= \sqrt{\texttt{x}(I)^2+\texttt{y}(I)^2} , \\ \texttt{angle} (I)= \texttt{atan2} ( \texttt{y} (I), \texttt{x} (I))[ \cdot180 / \pi ] \end{array}
478
479 The angles are calculated with accuracy about 0.3 degrees. For the point (0,0), the angle is set to 0.
480
481 .. seealso::
482
483     :ocv:func:`Sobel`,
484     :ocv:func:`Scharr`
485
486 checkRange
487 ----------
488 Checks every element of an input array for invalid values.
489
490 .. ocv:function:: bool checkRange( InputArray a, bool quiet=true, Point* pos=0, double minVal=-DBL_MAX, double maxVal=DBL_MAX )
491
492 .. ocv:pyfunction:: cv2.checkRange(a[, quiet[, minVal[, maxVal]]]) -> retval, pos
493
494     :param a: input array.
495
496     :param quiet: a flag, indicating whether the functions quietly return false when the array elements are out of range or they throw an exception.
497
498     :param pos: optional output parameter, where the position of the first outlier is stored; in the second function ``pos``, when not NULL, must be a pointer to array of ``src.dims`` elements.
499
500     :param minVal: inclusive lower boundary of valid values range.
501
502     :param maxVal: exclusive upper boundary of valid values range.
503
504 The functions ``checkRange`` check that every array element is neither NaN nor
505 infinite. When ``minVal < -DBL_MAX`` and ``maxVal < DBL_MAX``, the functions also check that each value is between ``minVal`` and ``maxVal``. In case of multi-channel arrays, each channel is processed independently.
506 If some values are out of range, position of the first outlier is stored in ``pos`` (when
507 ``pos != NULL``). Then, the functions either return false (when ``quiet=true``) or throw an exception.
508
509
510
511 compare
512 -------
513 Performs the per-element comparison of two arrays or an array and scalar value.
514
515 .. ocv:function:: void compare(InputArray src1, InputArray src2, OutputArray dst, int cmpop)
516
517 .. ocv:pyfunction:: cv2.compare(src1, src2, cmpop[, dst]) -> dst
518
519 .. ocv:cfunction:: void cvCmp( const CvArr* src1, const CvArr* src2, CvArr* dst, int cmp_op )
520
521 .. ocv:pyoldfunction:: cv.Cmp(src1, src2, dst, cmpOp)-> None
522
523 .. ocv:cfunction:: void cvCmpS( const CvArr* src, double value, CvArr* dst, int cmp_op )
524
525 .. ocv:pyoldfunction:: cv.CmpS(src, value, dst, cmpOp)-> None
526
527     :param src1: first input array or a scalar (in the case of ``cvCmp``, ``cv.Cmp``, ``cvCmpS``, ``cv.CmpS`` it is always an array); when it is an array, it must have a single channel.
528
529     :param src2: second input array or a scalar (in the case of ``cvCmp`` and ``cv.Cmp`` it is always an array; in the case of ``cvCmpS``, ``cv.CmpS`` it is always a scalar); when it is an array, it must have a single channel.
530
531     :param src: single input array.
532
533     :param value: scalar value.
534
535     :param dst: output array that has the same size as the input arrays and type= ``CV_8UC1`` .
536
537     :param cmpop: a flag, that specifies correspondence between the arrays:
538
539             * **CMP_EQ** ``src1`` is equal to ``src2``.
540             * **CMP_GT** ``src1`` is greater than ``src2``.
541             * **CMP_GE** ``src1`` is greater than or equal to ``src2``.
542             * **CMP_LT** ``src1`` is less than ``src2``.
543             * **CMP_LE** ``src1`` is less than or equal to ``src2``.
544             * **CMP_NE** ``src1`` is unequal to ``src2``.
545
546 The function compares:
547
548
549  *
550    Elements of two arrays when ``src1`` and ``src2`` have the same size:
551
552    .. math::
553
554        \texttt{dst} (I) =  \texttt{src1} (I)  \,\texttt{cmpop}\, \texttt{src2} (I)
555
556  *
557    Elements of ``src1`` with a scalar ``src2`` when ``src2`` is constructed from ``Scalar`` or has a single element:
558
559    .. math::
560
561        \texttt{dst} (I) =  \texttt{src1}(I) \,\texttt{cmpop}\,  \texttt{src2}
562
563  *
564    ``src1`` with elements of ``src2`` when ``src1`` is constructed from ``Scalar`` or has a single element:
565
566    .. math::
567
568        \texttt{dst} (I) =  \texttt{src1}  \,\texttt{cmpop}\, \texttt{src2} (I)
569
570
571 When the comparison result is true, the corresponding element of output array is set to 255.
572 The comparison operations can be replaced with the equivalent matrix expressions: ::
573
574     Mat dst1 = src1 >= src2;
575     Mat dst2 = src1 < 8;
576     ...
577
578
579 .. seealso::
580
581     :ocv:func:`checkRange`,
582     :ocv:func:`min`,
583     :ocv:func:`max`,
584     :ocv:func:`threshold`,
585     :ref:`MatrixExpressions`
586
587
588
589 completeSymm
590 ------------
591 Copies the lower or the upper half of a square matrix to another half.
592
593 .. ocv:function:: void completeSymm(InputOutputArray mtx, bool lowerToUpper=false)
594
595 .. ocv:pyfunction:: cv2.completeSymm(mtx[, lowerToUpper]) -> None
596
597     :param mtx: input-output floating-point square matrix.
598
599     :param lowerToUpper: operation flag; if true, the lower half is copied to the upper half. Otherwise, the upper half is copied to the lower half.
600
601 The function ``completeSymm`` copies the lower half of a square matrix to its another half. The matrix diagonal remains unchanged:
602
603  *
604     :math:`\texttt{mtx}_{ij}=\texttt{mtx}_{ji}`     for
605     :math:`i > j`     if ``lowerToUpper=false``
606
607  *
608     :math:`\texttt{mtx}_{ij}=\texttt{mtx}_{ji}`     for
609     :math:`i < j`     if ``lowerToUpper=true``
610
611 .. seealso::
612
613     :ocv:func:`flip`,
614     :ocv:func:`transpose`
615
616
617
618 convertScaleAbs
619 ---------------
620 Scales, calculates absolute values, and converts the result to 8-bit.
621
622 .. ocv:function:: void convertScaleAbs(InputArray src, OutputArray dst, double alpha=1, double beta=0)
623
624 .. ocv:pyfunction:: cv2.convertScaleAbs(src[, dst[, alpha[, beta]]]) -> dst
625
626 .. ocv:cfunction:: void cvConvertScaleAbs(const CvArr* src, CvArr* dst, double scale=1, double shift=0)
627 .. ocv:pyoldfunction:: cv.ConvertScaleAbs(src, dst, scale=1.0, shift=0.0)-> None
628
629     :param src: input array.
630
631     :param dst: output array.
632
633     :param alpha: optional scale factor.
634
635     :param beta: optional delta added to the scaled values.
636
637 On each element of the input array, the function ``convertScaleAbs`` performs three operations sequentially: scaling, taking an absolute value, conversion to an unsigned 8-bit type:
638
639
640 .. math::
641
642     \texttt{dst} (I)= \texttt{saturate\_cast<uchar>} (| \texttt{src} (I)* \texttt{alpha} +  \texttt{beta} |)
643
644 In case of multi-channel arrays, the function processes each channel independently. When the output is not 8-bit, the operation can be emulated by calling the ``Mat::convertTo`` method (or by using matrix expressions) and then by calculating an absolute value of the result. For example: ::
645
646     Mat_<float> A(30,30);
647     randu(A, Scalar(-100), Scalar(100));
648     Mat_<float> B = A*5 + 3;
649     B = abs(B);
650     // Mat_<float> B = abs(A*5+3) will also do the job,
651     // but it will allocate a temporary matrix
652
653
654 .. seealso::
655
656     :ocv:func:`Mat::convertTo`,
657     :ocv:func:`abs`
658
659
660
661 countNonZero
662 ------------
663 Counts non-zero array elements.
664
665 .. ocv:function:: int countNonZero( InputArray src )
666
667 .. ocv:pyfunction:: cv2.countNonZero(src) -> retval
668
669 .. ocv:cfunction:: int cvCountNonZero(const CvArr* arr)
670
671 .. ocv:pyoldfunction:: cv.CountNonZero(arr)-> int
672
673     :param src: single-channel array.
674
675 The function returns the number of non-zero elements in ``src`` :
676
677 .. math::
678
679     \sum _{I: \; \texttt{src} (I) \ne0 } 1
680
681 .. seealso::
682
683     :ocv:func:`mean`,
684     :ocv:func:`meanStdDev`,
685     :ocv:func:`norm`,
686     :ocv:func:`minMaxLoc`,
687     :ocv:func:`calcCovarMatrix`
688
689
690
691 cvarrToMat
692 ----------
693 Converts ``CvMat``, ``IplImage`` , or ``CvMatND`` to ``Mat``.
694
695 .. ocv:function:: Mat cvarrToMat( const CvArr* arr, bool copyData=false, bool allowND=true, int coiMode=0 )
696
697     :param arr: input ``CvMat``, ``IplImage`` , or  ``CvMatND``.
698
699     :param copyData: when false (default value), no data is copied and only the new header is created, in this case, the original array should not be deallocated while the new matrix header is used; if the parameter is true, all the data is copied and you may deallocate the original array right after the conversion.
700
701     :param allowND: when true (default value), ``CvMatND`` is converted to 2-dimensional ``Mat``, if it is possible (see the discussion below); if it is not possible, or when the parameter is false, the function will report an error.
702
703     :param coiMode: parameter specifying how the IplImage COI (when set) is handled.
704
705         *  If  ``coiMode=0`` and COI is set, the function reports an error.
706
707         *  If  ``coiMode=1`` , the function never reports an error. Instead, it returns the header to the whole original image and you will have to check and process COI manually. See  :ocv:func:`extractImageCOI` .
708
709 The function ``cvarrToMat`` converts ``CvMat``, ``IplImage`` , or ``CvMatND`` header to
710 :ocv:class:`Mat` header, and optionally duplicates the underlying data. The constructed header is returned by the function.
711
712 When ``copyData=false`` , the conversion is done really fast (in O(1) time) and the newly created matrix header will have ``refcount=0`` , which means that no reference counting is done for the matrix data. In this case, you have to preserve the data until the new header is destructed. Otherwise, when ``copyData=true`` , the new buffer is allocated and managed as if you created a new matrix from scratch and copied the data there. That is, ``cvarrToMat(arr, true)`` is equivalent to ``cvarrToMat(arr, false).clone()`` (assuming that COI is not set). The function provides a uniform way of supporting
713 ``CvArr`` paradigm in the code that is migrated to use new-style data structures internally. The reverse transformation, from
714 ``Mat`` to
715 ``CvMat`` or
716 ``IplImage`` can be done by a simple assignment: ::
717
718     CvMat* A = cvCreateMat(10, 10, CV_32F);
719     cvSetIdentity(A);
720     IplImage A1; cvGetImage(A, &A1);
721     Mat B = cvarrToMat(A);
722     Mat B1 = cvarrToMat(&A1);
723     IplImage C = B;
724     CvMat C1 = B1;
725     // now A, A1, B, B1, C and C1 are different headers
726     // for the same 10x10 floating-point array.
727     // note that you will need to use "&"
728     // to pass C & C1 to OpenCV functions, for example:
729     printf("%g\n", cvNorm(&C1, 0, CV_L2));
730
731 Normally, the function is used to convert an old-style 2D array (
732 ``CvMat`` or
733 ``IplImage`` ) to ``Mat`` . However, the function can also take
734 ``CvMatND`` as an input and create
735 :ocv:func:`Mat` for it, if it is possible. And, for ``CvMatND A`` , it is possible if and only if ``A.dim[i].size*A.dim.step[i] == A.dim.step[i-1]`` for all or for all but one ``i, 0 < i < A.dims`` . That is, the matrix data should be continuous or it should be representable as a sequence of continuous matrices. By using this function in this way, you can process
736 ``CvMatND`` using an arbitrary element-wise function.
737
738 The last parameter, ``coiMode`` , specifies how to deal with an image with COI set. By default, it is 0 and the function reports an error when an image with COI comes in. And ``coiMode=1`` means that no error is signalled. You have to check COI presence and handle it manually. The modern structures, such as
739 :ocv:class:`Mat` and
740 ``MatND`` do not support COI natively. To process an individual channel of a new-style array, you need either to organize a loop over the array (for example, using matrix iterators) where the channel of interest will be processed, or extract the COI using
741 :ocv:func:`mixChannels` (for new-style arrays) or
742 :ocv:func:`extractImageCOI` (for old-style arrays), process this individual channel, and insert it back to the output array if needed (using
743 :ocv:func:`mixChannels` or
744 :ocv:func:`insertImageCOI` , respectively).
745
746 .. seealso::
747
748     :ocv:cfunc:`cvGetImage`,
749     :ocv:cfunc:`cvGetMat`,
750     :ocv:func:`extractImageCOI`,
751     :ocv:func:`insertImageCOI`,
752     :ocv:func:`mixChannels`
753
754 dct
755 ---
756 Performs a forward or inverse discrete Cosine transform of 1D or 2D array.
757
758 .. ocv:function:: void dct(InputArray src, OutputArray dst, int flags=0)
759
760 .. ocv:pyfunction:: cv2.dct(src[, dst[, flags]]) -> dst
761
762 .. ocv:cfunction:: void cvDCT(const CvArr* src, CvArr* dst, int flags)
763 .. ocv:pyoldfunction:: cv.DCT(src, dst, flags)-> None
764
765     :param src: input floating-point array.
766
767     :param dst: output array of the same size and type as  ``src`` .
768
769     :param flags: transformation flags as a combination of the following values:
770
771             * **DCT_INVERSE** performs an inverse 1D or 2D transform instead of the default forward transform.
772
773             * **DCT_ROWS** performs a forward or inverse transform of every individual row of the input matrix. This flag enables you to transform multiple vectors simultaneously and can be used to decrease the overhead (which is sometimes several times larger than the processing itself) to perform 3D and higher-dimensional transforms and so forth.
774
775 The function ``dct`` performs a forward or inverse discrete Cosine transform (DCT) of a 1D or 2D floating-point array:
776
777 *
778     Forward Cosine transform of a 1D vector of ``N`` elements:
779
780     .. math::
781
782         Y = C^{(N)}  \cdot X
783
784     where
785
786     .. math::
787
788         C^{(N)}_{jk}= \sqrt{\alpha_j/N} \cos \left ( \frac{\pi(2k+1)j}{2N} \right )
789
790     and
791
792     :math:`\alpha_0=1`, :math:`\alpha_j=2` for *j > 0*.
793
794 *
795     Inverse Cosine transform of a 1D vector of ``N`` elements:
796
797     .. math::
798
799         X =  \left (C^{(N)} \right )^{-1}  \cdot Y =  \left (C^{(N)} \right )^T  \cdot Y
800
801     (since
802     :math:`C^{(N)}` is an orthogonal matrix,
803     :math:`C^{(N)} \cdot \left(C^{(N)}\right)^T = I` )
804
805 *
806     Forward 2D Cosine transform of ``M x N`` matrix:
807
808     .. math::
809
810         Y = C^{(N)}  \cdot X  \cdot \left (C^{(N)} \right )^T
811
812 *
813     Inverse 2D Cosine transform of ``M x N`` matrix:
814
815     .. math::
816
817         X =  \left (C^{(N)} \right )^T  \cdot X  \cdot C^{(N)}
818
819
820 The function chooses the mode of operation by looking at the flags and size of the input array:
821
822 *
823     If ``(flags & DCT_INVERSE) == 0`` , the function does a forward 1D or 2D transform. Otherwise, it is an inverse 1D or 2D transform.
824
825 *
826     If ``(flags & DCT_ROWS) != 0`` , the function performs a 1D transform of each row.
827
828 *
829     If the array is a single column or a single row, the function performs a 1D transform.
830
831 *
832     If none of the above is true, the function performs a 2D transform.
833
834 .. note::
835
836     Currently ``dct`` supports even-size arrays (2, 4, 6 ...). For data analysis and approximation, you can pad the array when necessary.
837
838     Also, the function performance depends very much, and not monotonically, on the array size (see
839     :ocv:func:`getOptimalDFTSize` ). In the current implementation DCT of a vector of size ``N`` is calculated via DFT of a vector of size ``N/2`` . Thus, the optimal DCT size ``N1 >= N`` can be calculated as: ::
840
841         size_t getOptimalDCTSize(size_t N) { return 2*getOptimalDFTSize((N+1)/2); }
842         N1 = getOptimalDCTSize(N);
843
844 .. seealso:: :ocv:func:`dft` , :ocv:func:`getOptimalDFTSize` , :ocv:func:`idct`
845
846
847
848 dft
849 ---
850 Performs a forward or inverse Discrete Fourier transform of a 1D or 2D floating-point array.
851
852 .. ocv:function:: void dft(InputArray src, OutputArray dst, int flags=0, int nonzeroRows=0)
853
854 .. ocv:pyfunction:: cv2.dft(src[, dst[, flags[, nonzeroRows]]]) -> dst
855
856 .. ocv:cfunction:: void cvDFT( const CvArr* src, CvArr* dst, int flags, int nonzero_rows=0 )
857
858 .. ocv:pyoldfunction:: cv.DFT(src, dst, flags, nonzeroRows=0)-> None
859
860     :param src: input array that could be real or complex.
861
862     :param dst: output array whose size and type depends on the  ``flags`` .
863
864     :param flags: transformation flags, representing a combination of the following values:
865
866             * **DFT_INVERSE** performs an inverse 1D or 2D transform instead of the default forward transform.
867
868             * **DFT_SCALE** scales the result: divide it by the number of array elements. Normally, it is combined with  ``DFT_INVERSE``.
869             * **DFT_ROWS** performs a forward or inverse transform of every individual row of the input matrix; this flag enables you to transform multiple vectors simultaneously and can be used to decrease the overhead (which is sometimes several times larger than the processing itself) to perform 3D and higher-dimensional transformations and so forth.
870
871             * **DFT_COMPLEX_OUTPUT** performs a forward transformation of 1D or 2D real array; the result, though being a complex array, has complex-conjugate symmetry (*CCS*, see the function description below for details), and such an array can be packed into a real array of the same size as input, which is the fastest option and which is what the function does by default; however, you may wish to get a full complex array (for simpler spectrum analysis, and so on) - pass the flag to enable the function to produce a full-size complex output array.
872
873             * **DFT_REAL_OUTPUT** performs an inverse transformation of a 1D or 2D complex array; the result is normally a complex array of the same size, however, if the input array has conjugate-complex symmetry (for example, it is a result of forward transformation with  ``DFT_COMPLEX_OUTPUT``  flag), the output is a real array; while the function itself does not check whether the input is symmetrical or not, you can pass the flag and then the function will assume the symmetry and produce the real output array (note that when the input is packed into a real array and inverse transformation is executed, the function treats the input as a packed complex-conjugate symmetrical array, and the output will also be a real array).
874
875     :param nonzeroRows: when the parameter is not zero, the function assumes that only the first ``nonzeroRows`` rows of the input array (``DFT_INVERSE`` is not set) or only the first ``nonzeroRows`` of the output array (``DFT_INVERSE`` is set) contain non-zeros, thus, the function can handle the rest of the rows more efficiently and save some time; this technique is very useful for calculating array cross-correlation or convolution using DFT.
876
877
878 The function performs one of the following:
879
880 *
881     Forward the Fourier transform of a 1D vector of ``N`` elements:
882
883     .. math::
884
885         Y = F^{(N)}  \cdot X,
886
887     where
888     :math:`F^{(N)}_{jk}=\exp(-2\pi i j k/N)` and
889     :math:`i=\sqrt{-1}`
890
891 *
892     Inverse the Fourier transform of a 1D vector of ``N`` elements:
893
894     .. math::
895
896         \begin{array}{l} X'=  \left (F^{(N)} \right )^{-1}  \cdot Y =  \left (F^{(N)} \right )^*  \cdot y  \\ X = (1/N)  \cdot X, \end{array}
897
898     where
899     :math:`F^*=\left(\textrm{Re}(F^{(N)})-\textrm{Im}(F^{(N)})\right)^T`
900
901 *
902     Forward the 2D Fourier transform of a ``M x N`` matrix:
903
904     .. math::
905
906         Y = F^{(M)}  \cdot X  \cdot F^{(N)}
907
908 *
909     Inverse the 2D Fourier transform of a ``M x N`` matrix:
910
911     .. math::
912
913         \begin{array}{l} X'=  \left (F^{(M)} \right )^*  \cdot Y  \cdot \left (F^{(N)} \right )^* \\ X =  \frac{1}{M \cdot N} \cdot X' \end{array}
914
915
916 In case of real (single-channel) data, the output spectrum of the forward Fourier transform or input spectrum of the inverse Fourier transform can be represented in a packed format called *CCS* (complex-conjugate-symmetrical). It was borrowed from IPL (Intel* Image Processing Library). Here is how 2D *CCS* spectrum looks:
917
918 .. math::
919
920     \begin{bmatrix} Re Y_{0,0} & Re Y_{0,1} & Im Y_{0,1} & Re Y_{0,2} & Im Y_{0,2} &  \cdots & Re Y_{0,N/2-1} & Im Y_{0,N/2-1} & Re Y_{0,N/2}  \\ Re Y_{1,0} & Re Y_{1,1} & Im Y_{1,1} & Re Y_{1,2} & Im Y_{1,2} &  \cdots & Re Y_{1,N/2-1} & Im Y_{1,N/2-1} & Re Y_{1,N/2}  \\ Im Y_{1,0} & Re Y_{2,1} & Im Y_{2,1} & Re Y_{2,2} & Im Y_{2,2} &  \cdots & Re Y_{2,N/2-1} & Im Y_{2,N/2-1} & Im Y_{1,N/2}  \\ \hdotsfor{9} \\ Re Y_{M/2-1,0} &  Re Y_{M-3,1}  & Im Y_{M-3,1} &  \hdotsfor{3} & Re Y_{M-3,N/2-1} & Im Y_{M-3,N/2-1}& Re Y_{M/2-1,N/2}  \\ Im Y_{M/2-1,0} &  Re Y_{M-2,1}  & Im Y_{M-2,1} &  \hdotsfor{3} & Re Y_{M-2,N/2-1} & Im Y_{M-2,N/2-1}& Im Y_{M/2-1,N/2}  \\ Re Y_{M/2,0}  &  Re Y_{M-1,1} &  Im Y_{M-1,1} &  \hdotsfor{3} & Re Y_{M-1,N/2-1} & Im Y_{M-1,N/2-1}& Re Y_{M/2,N/2} \end{bmatrix}
921
922 In case of 1D transform of a real vector, the output looks like the first row of the matrix above.
923
924 So, the function chooses an operation mode depending on the flags and size of the input array:
925
926  * If ``DFT_ROWS`` is set or the input array has a single row or single column, the function performs a 1D forward or inverse transform of each row of a matrix when ``DFT_ROWS`` is set. Otherwise, it performs a 2D transform.
927
928  * If the input array is real and ``DFT_INVERSE`` is not set, the function performs a forward 1D or 2D transform:
929
930     * When ``DFT_COMPLEX_OUTPUT`` is set, the output is a complex matrix of the same size as input.
931
932     * When ``DFT_COMPLEX_OUTPUT`` is not set, the output is a real matrix of the same size as input. In case of 2D transform, it uses the packed format as shown above. In case of a single 1D transform, it looks like the first row of the matrix above. In case of multiple 1D transforms (when using the ``DCT_ROWS``         flag), each row of the output matrix looks like the first row of the matrix above.
933
934  * If the input array is complex and either ``DFT_INVERSE``     or ``DFT_REAL_OUTPUT``     are not set, the output is a complex array of the same size as input. The function performs a forward or inverse 1D or 2D transform of the whole input array or each row of the input array independently, depending on the flags ``DFT_INVERSE`` and ``DFT_ROWS``.
935
936  * When ``DFT_INVERSE`` is set and the input array is real, or it is complex but ``DFT_REAL_OUTPUT``     is set, the output is a real array of the same size as input. The function performs a 1D or 2D inverse transformation of the whole input array or each individual row, depending on the flags ``DFT_INVERSE`` and ``DFT_ROWS``.
937
938 If ``DFT_SCALE`` is set, the scaling is done after the transformation.
939
940 Unlike :ocv:func:`dct` , the function supports arrays of arbitrary size. But only those arrays are processed efficiently, whose sizes can be factorized in a product of small prime numbers (2, 3, and 5 in the current implementation). Such an efficient DFT size can be calculated using the :ocv:func:`getOptimalDFTSize` method.
941
942 The sample below illustrates how to calculate a DFT-based convolution of two 2D real arrays: ::
943
944     void convolveDFT(InputArray A, InputArray B, OutputArray C)
945     {
946         // reallocate the output array if needed
947         C.create(abs(A.rows - B.rows)+1, abs(A.cols - B.cols)+1, A.type());
948         Size dftSize;
949         // calculate the size of DFT transform
950         dftSize.width = getOptimalDFTSize(A.cols + B.cols - 1);
951         dftSize.height = getOptimalDFTSize(A.rows + B.rows - 1);
952
953         // allocate temporary buffers and initialize them with 0's
954         Mat tempA(dftSize, A.type(), Scalar::all(0));
955         Mat tempB(dftSize, B.type(), Scalar::all(0));
956
957         // copy A and B to the top-left corners of tempA and tempB, respectively
958         Mat roiA(tempA, Rect(0,0,A.cols,A.rows));
959         A.copyTo(roiA);
960         Mat roiB(tempB, Rect(0,0,B.cols,B.rows));
961         B.copyTo(roiB);
962
963         // now transform the padded A & B in-place;
964         // use "nonzeroRows" hint for faster processing
965         dft(tempA, tempA, 0, A.rows);
966         dft(tempB, tempB, 0, B.rows);
967
968         // multiply the spectrums;
969         // the function handles packed spectrum representations well
970         mulSpectrums(tempA, tempB, tempA);
971
972         // transform the product back from the frequency domain.
973         // Even though all the result rows will be non-zero,
974         // you need only the first C.rows of them, and thus you
975         // pass nonzeroRows == C.rows
976         dft(tempA, tempA, DFT_INVERSE + DFT_SCALE, C.rows);
977
978         // now copy the result back to C.
979         tempA(Rect(0, 0, C.cols, C.rows)).copyTo(C);
980
981         // all the temporary buffers will be deallocated automatically
982     }
983
984
985 To optimize this sample, consider the following approaches:
986
987 *
988     Since ``nonzeroRows != 0`` is passed to the forward transform calls and since  ``A`` and ``B`` are copied to the top-left corners of ``tempA`` and ``tempB``, respectively, it is not necessary to clear the whole ``tempA`` and ``tempB``. It is only necessary to clear the ``tempA.cols - A.cols`` ( ``tempB.cols - B.cols``) rightmost columns of the matrices.
989
990 *
991    This DFT-based convolution does not have to be applied to the whole big arrays, especially if ``B``     is significantly smaller than ``A`` or vice versa. Instead, you can calculate convolution by parts. To do this, you need to split the output array ``C``     into multiple tiles. For each tile, estimate which parts of ``A``     and ``B``     are required to calculate convolution in this tile. If the tiles in ``C``     are too small, the speed will decrease a lot because of repeated work. In the ultimate case, when each tile in ``C``     is a single pixel, the algorithm becomes equivalent to the naive convolution algorithm. If the tiles are too big, the temporary arrays ``tempA``     and ``tempB``     become too big and there is also a slowdown because of bad cache locality. So, there is an optimal tile size somewhere in the middle.
992
993 *
994     If different tiles in ``C``     can be calculated in parallel and, thus, the convolution is done by parts, the loop can be threaded.
995
996 All of the above improvements have been implemented in :ocv:func:`matchTemplate` and :ocv:func:`filter2D` . Therefore, by using them, you can get the performance even better than with the above theoretically optimal implementation. Though, those two functions actually calculate cross-correlation, not convolution, so you need to "flip" the second convolution operand ``B`` vertically and horizontally using :ocv:func:`flip` .
997
998 .. seealso:: :ocv:func:`dct` , :ocv:func:`getOptimalDFTSize` , :ocv:func:`mulSpectrums`, :ocv:func:`filter2D` , :ocv:func:`matchTemplate` , :ocv:func:`flip` , :ocv:func:`cartToPolar` , :ocv:func:`magnitude` , :ocv:func:`phase`
999
1000
1001
1002 divide
1003 ------
1004 Performs per-element division of two arrays or a scalar by an array.
1005
1006 .. ocv:function:: void divide(InputArray src1, InputArray src2, OutputArray dst, double scale=1, int dtype=-1)
1007
1008 .. ocv:function:: void divide(double scale, InputArray src2, OutputArray dst, int dtype=-1)
1009
1010 .. ocv:pyfunction:: cv2.divide(src1, src2[, dst[, scale[, dtype]]]) -> dst
1011 .. ocv:pyfunction:: cv2.divide(scale, src2[, dst[, dtype]]) -> dst
1012
1013 .. ocv:cfunction:: void cvDiv(const CvArr* src1, const CvArr* src2, CvArr* dst, double scale=1)
1014 .. ocv:pyoldfunction:: cv.Div(src1, src2, dst, scale=1) -> None
1015
1016     :param src1: first input array.
1017
1018     :param src2: second input array of the same size and type as ``src1``.
1019
1020     :param scale: scalar factor.
1021
1022     :param dst: output array of the same size and type as ``src2``.
1023
1024     :param dtype: optional depth of the output array; if ``-1``, ``dst`` will have depth ``src2.depth()``, but in case of an array-by-array division, you can only pass ``-1`` when ``src1.depth()==src2.depth()``.
1025
1026 The functions ``divide`` divide one array by another:
1027
1028 .. math::
1029
1030     \texttt{dst(I) = saturate(src1(I)*scale/src2(I))}
1031
1032 or a scalar by an array when there is no ``src1`` :
1033
1034 .. math::
1035
1036     \texttt{dst(I) = saturate(scale/src2(I))}
1037
1038 When ``src2(I)`` is zero, ``dst(I)`` will also be zero. Different channels of multi-channel arrays are processed independently.
1039
1040 .. note:: Saturation is not applied when the output array has the depth ``CV_32S``. You may even get result of an incorrect sign in the case of overflow.
1041
1042 .. seealso::
1043
1044     :ocv:func:`multiply`,
1045     :ocv:func:`add`,
1046     :ocv:func:`subtract`,
1047     :ref:`MatrixExpressions`
1048
1049
1050
1051 determinant
1052 -----------
1053 Returns the determinant of a square floating-point matrix.
1054
1055 .. ocv:function:: double determinant(InputArray mtx)
1056
1057 .. ocv:pyfunction:: cv2.determinant(mtx) -> retval
1058
1059 .. ocv:cfunction:: double cvDet( const CvArr* mat )
1060
1061 .. ocv:pyoldfunction:: cv.Det(mat) -> float
1062
1063     :param mtx: input matrix that must have ``CV_32FC1`` or ``CV_64FC1`` type and square size.
1064
1065 The function ``determinant`` calculates and returns the determinant of the specified matrix. For small matrices ( ``mtx.cols=mtx.rows<=3`` ),
1066 the direct method is used. For larger matrices, the function uses LU factorization with partial pivoting.
1067
1068 For symmetric positively-determined matrices, it is also possible to use :ocv:func:`eigen` decomposition to calculate the determinant.
1069
1070 .. seealso::
1071
1072     :ocv:func:`trace`,
1073     :ocv:func:`invert`,
1074     :ocv:func:`solve`,
1075     :ocv:func:`eigen`,
1076     :ref:`MatrixExpressions`
1077
1078
1079
1080 eigen
1081 -----
1082 Calculates eigenvalues and eigenvectors of a symmetric matrix.
1083
1084 .. ocv:function:: bool eigen(InputArray src, OutputArray eigenvalues, int lowindex=-1, int highindex=-1)
1085
1086 .. ocv:function:: bool eigen(InputArray src, OutputArray eigenvalues, OutputArray eigenvectors, int lowindex=-1,int highindex=-1)
1087
1088 .. ocv:pyfunction:: cv2.eigen(src, computeEigenvectors[, eigenvalues[, eigenvectors]]) -> retval, eigenvalues, eigenvectors
1089
1090 .. ocv:cfunction:: void cvEigenVV( CvArr* mat, CvArr* evects, CvArr* evals, double eps=0, int lowindex=-1, int highindex=-1 )
1091
1092 .. ocv:pyoldfunction:: cv.EigenVV(mat, evects, evals, eps, lowindex=-1, highindex=-1)-> None
1093
1094     :param src: input matrix that must have ``CV_32FC1`` or ``CV_64FC1`` type, square size and be symmetrical (``src`` :sup:`T` == ``src``).
1095
1096     :param eigenvalues: output vector of eigenvalues of the same type as ``src``; the eigenvalues are stored in the descending order.
1097
1098     :param eigenvectors: output matrix of eigenvectors; it has the same size and type as ``src``; the eigenvectors are stored as subsequent matrix rows, in the same order as the corresponding eigenvalues.
1099
1100     :param lowindex: optional index of largest eigenvalue/-vector to calculate; the parameter is ignored in the current implementation.
1101
1102     :param highindex: optional index of smallest eigenvalue/-vector to calculate; the parameter is ignored in the current implementation.
1103
1104 The functions ``eigen`` calculate just eigenvalues, or eigenvalues and eigenvectors of the symmetric matrix ``src`` : ::
1105
1106     src*eigenvectors.row(i).t() = eigenvalues.at<srcType>(i)*eigenvectors.row(i).t()
1107
1108 .. note:: in the new and the old interfaces different ordering of eigenvalues and eigenvectors parameters is used.
1109
1110 .. seealso:: :ocv:func:`completeSymm` , :ocv:class:`PCA`
1111
1112
1113
1114 exp
1115 ---
1116 Calculates the exponent of every array element.
1117
1118 .. ocv:function:: void exp(InputArray src, OutputArray dst)
1119
1120 .. ocv:pyfunction:: cv2.exp(src[, dst]) -> dst
1121
1122 .. ocv:cfunction:: void cvExp(const CvArr* src, CvArr* dst)
1123 .. ocv:pyoldfunction:: cv.Exp(src, dst)-> None
1124
1125     :param src: input array.
1126
1127     :param dst: output array of the same size and type as ``src``.
1128
1129 The function ``exp`` calculates the exponent of every element of the input array:
1130
1131 .. math::
1132
1133     \texttt{dst} [I] = e^{ src(I) }
1134
1135 The maximum relative error is about ``7e-6`` for single-precision input and less than ``1e-10`` for double-precision input. Currently, the function converts denormalized values to zeros on output. Special values (NaN, Inf) are not handled.
1136
1137 .. seealso::  :ocv:func:`log` , :ocv:func:`cartToPolar` , :ocv:func:`polarToCart` , :ocv:func:`phase` , :ocv:func:`pow` , :ocv:func:`sqrt` , :ocv:func:`magnitude`
1138
1139
1140
1141 extractImageCOI
1142 ---------------
1143 Extracts the selected image channel.
1144
1145 .. ocv:function:: void extractImageCOI( const CvArr* arr, OutputArray coiimg, int coi=-1 )
1146
1147     :param arr: input array; it should be a pointer to ``CvMat`` or ``IplImage``.
1148
1149     :param coiimg: output array with a single channel and the same size and depth as ``arr``.
1150
1151     :param coi: if the parameter is ``>=0``, it specifies the channel to extract, if it is ``<0`` and ``arr`` is a pointer to ``IplImage`` with a valid COI set, the selected COI is extracted.
1152
1153 The function ``extractImageCOI`` is used to extract an image COI from an old-style array and put the result to the new-style C++ matrix. As usual, the output matrix is reallocated using ``Mat::create`` if needed.
1154
1155 To extract a channel from a new-style matrix, use
1156 :ocv:func:`mixChannels` or
1157 :ocv:func:`split` .
1158
1159 .. seealso::  :ocv:func:`mixChannels` , :ocv:func:`split` , :ocv:func:`merge` , :ocv:func:`cvarrToMat` , :ocv:cfunc:`cvSetImageCOI` , :ocv:cfunc:`cvGetImageCOI`
1160
1161
1162 insertImageCOI
1163 --------------
1164 Copies the selected image channel from a new-style C++ matrix to the old-style C array.
1165
1166 .. ocv:function:: void insertImageCOI( InputArray coiimg, CvArr* arr, int coi=-1 )
1167
1168     :param coiimg: input array with a single channel and the same size and depth as ``arr``.
1169
1170     :param arr: output array, it should be a pointer to ``CvMat`` or ``IplImage``.
1171
1172     :param coi: if the parameter is ``>=0``, it specifies the channel to insert, if it is ``<0`` and ``arr`` is a pointer to ``IplImage`` with a  valid COI set, the selected COI is extracted.
1173
1174 The function ``insertImageCOI`` is used to extract an image COI from a new-style C++ matrix and put the result to the old-style array.
1175
1176 The sample below illustrates how to use the function:
1177 ::
1178
1179     Mat temp(240, 320, CV_8UC1, Scalar(255));
1180     IplImage* img = cvCreateImage(cvSize(320,240), IPL_DEPTH_8U, 3);
1181     insertImageCOI(temp, img, 1); //insert to the first channel
1182     cvNamedWindow("window",1);
1183     cvShowImage("window", img); //you should see green image, because channel number 1 is green (BGR)
1184     cvWaitKey(0);
1185     cvDestroyAllWindows();
1186     cvReleaseImage(&img);
1187
1188 To insert a channel to a new-style matrix, use
1189 :ocv:func:`merge` .
1190
1191 .. seealso::  :ocv:func:`mixChannels` , :ocv:func:`split` , :ocv:func:`merge` , :ocv:func:`cvarrToMat` , :ocv:cfunc:`cvSetImageCOI` , :ocv:cfunc:`cvGetImageCOI`
1192
1193
1194 flip
1195 ----
1196 Flips a 2D array around vertical, horizontal, or both axes.
1197
1198 .. ocv:function:: void flip(InputArray src, OutputArray dst, int flipCode)
1199
1200 .. ocv:pyfunction:: cv2.flip(src, flipCode[, dst]) -> dst
1201
1202 .. ocv:cfunction:: void cvFlip( const CvArr* src, CvArr* dst=NULL, int flip_mode=0 )
1203
1204 .. ocv:pyoldfunction:: cv.Flip(src, dst=None, flipMode=0)-> None
1205
1206     :param src: input array.
1207
1208     :param dst: output array of the same size and type as ``src``.
1209
1210     :param flipCode: a flag to specify how to flip the array; 0 means flipping around the x-axis and positive value (for example, 1) means flipping around y-axis. Negative value (for example, -1) means flipping around both axes (see the discussion below for the formulas).
1211
1212 The function ``flip`` flips the array in one of three different ways (row and column indices are 0-based):
1213
1214 .. math::
1215
1216     \texttt{dst} _{ij} =
1217     \left\{
1218     \begin{array}{l l}
1219     \texttt{src} _{\texttt{src.rows}-i-1,j} & if\;  \texttt{flipCode} = 0 \\
1220     \texttt{src} _{i, \texttt{src.cols} -j-1} & if\;  \texttt{flipCode} > 0 \\
1221     \texttt{src} _{ \texttt{src.rows} -i-1, \texttt{src.cols} -j-1} & if\; \texttt{flipCode} < 0 \\
1222     \end{array}
1223     \right.
1224
1225 The example scenarios of using the function are the following:
1226
1227  *
1228     Vertical flipping of the image (``flipCode == 0``) to switch between top-left and bottom-left image origin. This is a typical operation in video processing on Microsoft Windows* OS.
1229
1230  *
1231     Horizontal flipping of the image with the subsequent horizontal shift and absolute difference calculation to check for a vertical-axis symmetry (``flipCode > 0``).
1232
1233  *
1234     Simultaneous horizontal and vertical flipping of the image with the subsequent shift and absolute difference calculation to check for a central symmetry (``flipCode < 0``).
1235
1236  *
1237     Reversing the order of point arrays (``flipCode > 0`` or ``flipCode == 0``).
1238
1239 .. seealso:: :ocv:func:`transpose` , :ocv:func:`repeat` , :ocv:func:`completeSymm`
1240
1241
1242
1243 gemm
1244 ----
1245 Performs generalized matrix multiplication.
1246
1247 .. ocv:function:: void gemm( InputArray src1, InputArray src2, double alpha, InputArray src3, double gamma, OutputArray dst, int flags=0 )
1248
1249 .. ocv:pyfunction:: cv2.gemm(src1, src2, alpha, src3, gamma[, dst[, flags]]) -> dst
1250
1251 .. ocv:cfunction:: void cvGEMM( const CvArr* src1, const CvArr* src2, double alpha, const CvArr* src3, double beta, CvArr* dst, int tABC=0)
1252 .. ocv:pyoldfunction:: cv.GEMM(src1, src2, alpha, src3, beta, dst, tABC=0)-> None
1253
1254     :param src1: first multiplied input matrix that should have ``CV_32FC1``, ``CV_64FC1``, ``CV_32FC2``, or ``CV_64FC2`` type.
1255
1256     :param src2: second multiplied input matrix of the same type as ``src1``.
1257
1258     :param alpha: weight of the matrix product.
1259
1260     :param src3: third optional delta matrix added to the matrix product; it should have the same type as ``src1`` and ``src2``.
1261
1262     :param beta: weight of ``src3``.
1263
1264     :param dst: output matrix; it has the proper size and the same type as input matrices.
1265
1266     :param flags: operation flags:
1267
1268             * **GEMM_1_T** transposes ``src1``.
1269             * **GEMM_2_T** transposes ``src2``.
1270             * **GEMM_3_T** transposes ``src3``.
1271
1272 The function performs generalized matrix multiplication similar to the ``gemm`` functions in BLAS level 3. For example, ``gemm(src1, src2, alpha, src3, beta, dst, GEMM_1_T + GEMM_3_T)`` corresponds to
1273
1274 .. math::
1275
1276     \texttt{dst} =  \texttt{alpha} \cdot \texttt{src1} ^T  \cdot \texttt{src2} +  \texttt{beta} \cdot \texttt{src3} ^T
1277
1278 The function can be replaced with a matrix expression. For example, the above call can be replaced with: ::
1279
1280     dst = alpha*src1.t()*src2 + beta*src3.t();
1281
1282
1283 .. seealso::  :ocv:func:`mulTransposed` , :ocv:func:`transform` , :ref:`MatrixExpressions`
1284
1285
1286
1287 getConvertElem
1288 --------------
1289 Returns a conversion function for a single pixel.
1290
1291 .. ocv:function:: ConvertData getConvertElem(int fromType, int toType)
1292
1293 .. ocv:function:: ConvertScaleData getConvertScaleElem(int fromType, int toType)
1294
1295     :param fromType: input pixel type.
1296
1297     :param toType: output pixel type.
1298
1299     :param from: callback parameter: pointer to the input pixel.
1300
1301     :param to: callback parameter: pointer to the output pixel
1302
1303     :param cn: callback parameter: the number of channels; it can be arbitrary, 1, 100, 100000, etc.
1304
1305     :param alpha: ``ConvertScaleData`` callback optional parameter: the scale factor.
1306
1307     :param beta: ``ConvertScaleData`` callback optional parameter: the delta or offset.
1308
1309 The functions ``getConvertElem`` and ``getConvertScaleElem`` return pointers to the functions for converting individual pixels from one type to another. While the main function purpose is to convert single pixels (actually, for converting sparse matrices from one type to another), you can use them to convert the whole row of a dense matrix or the whole matrix at once, by setting ``cn = matrix.cols*matrix.rows*matrix.channels()`` if the matrix data is continuous.
1310
1311 ``ConvertData`` and ``ConvertScaleData`` are defined as: ::
1312
1313     typedef void (*ConvertData)(const void* from, void* to, int cn)
1314     typedef void (*ConvertScaleData)(const void* from, void* to,
1315                                      int cn, double alpha, double beta)
1316
1317 .. seealso:: :ocv:func:`Mat::convertTo` , :ocv:func:`SparseMat::convertTo`
1318
1319
1320
1321 getOptimalDFTSize
1322 -----------------
1323 Returns the optimal DFT size for a given vector size.
1324
1325 .. ocv:function:: int getOptimalDFTSize(int vecsize)
1326
1327 .. ocv:pyfunction:: cv2.getOptimalDFTSize(vecsize) -> retval
1328
1329 .. ocv:cfunction:: int cvGetOptimalDFTSize(int size0)
1330 .. ocv:pyoldfunction:: cv.GetOptimalDFTSize(size0)-> int
1331
1332     :param vecsize: vector size.
1333
1334 DFT performance is not a monotonic function of a vector size. Therefore, when you calculate convolution of two arrays or perform the spectral analysis of an array, it usually makes sense to pad the input data with zeros to get a bit larger array that can be transformed much faster than the original one.
1335 Arrays whose size is a power-of-two (2, 4, 8, 16, 32, ...) are the fastest to process. Though, the arrays whose size is a product of 2's, 3's, and 5's (for example, 300 = 5*5*3*2*2) are also processed quite efficiently.
1336
1337 The function ``getOptimalDFTSize`` returns the minimum number ``N`` that is greater than or equal to ``vecsize``  so that the DFT of a vector of size ``N`` can be processed efficiently. In the current implementation ``N`` = 2 :sup:`p` * 3 :sup:`q` * 5 :sup:`r` for some integer ``p``, ``q``, ``r``.
1338
1339 The function returns a negative number if ``vecsize`` is too large (very close to ``INT_MAX`` ).
1340
1341 While the function cannot be used directly to estimate the optimal vector size for DCT transform (since the current DCT implementation supports only even-size vectors), it can be easily processed as ``getOptimalDFTSize((vecsize+1)/2)*2``.
1342
1343 .. seealso:: :ocv:func:`dft` , :ocv:func:`dct` , :ocv:func:`idft` , :ocv:func:`idct` , :ocv:func:`mulSpectrums`
1344
1345
1346
1347 idct
1348 ----
1349 Calculates the inverse Discrete Cosine Transform of a 1D or 2D array.
1350
1351 .. ocv:function:: void idct(InputArray src, OutputArray dst, int flags=0)
1352
1353 .. ocv:pyfunction:: cv2.idct(src[, dst[, flags]]) -> dst
1354
1355     :param src: input floating-point single-channel array.
1356
1357     :param dst: output array of the same size and type as ``src``.
1358
1359     :param flags: operation flags.
1360
1361 ``idct(src, dst, flags)`` is equivalent to ``dct(src, dst, flags | DCT_INVERSE)``.
1362
1363 .. seealso::
1364
1365     :ocv:func:`dct`,
1366     :ocv:func:`dft`,
1367     :ocv:func:`idft`,
1368     :ocv:func:`getOptimalDFTSize`
1369
1370
1371
1372 idft
1373 ----
1374 Calculates the inverse Discrete Fourier Transform of a 1D or 2D array.
1375
1376 .. ocv:function:: void idft(InputArray src, OutputArray dst, int flags=0, int nonzeroRows=0)
1377
1378 .. ocv:pyfunction:: cv2.idft(src[, dst[, flags[, nonzeroRows]]]) -> dst
1379
1380     :param src: input floating-point real or complex array.
1381
1382     :param dst: output array whose size and type depend on the ``flags``.
1383
1384     :param flags: operation flags (see :ocv:func:`dft`).
1385
1386     :param nonzeroRows: number of ``dst`` rows to process; the rest of the rows have undefined content (see the convolution sample in  :ocv:func:`dft` description.
1387
1388 ``idft(src, dst, flags)`` is equivalent to ``dft(src, dst, flags | DFT_INVERSE)`` .
1389
1390 See :ocv:func:`dft` for details.
1391
1392 .. note:: None of ``dft`` and ``idft`` scales the result by default. So, you should pass ``DFT_SCALE`` to one of ``dft`` or ``idft`` explicitly to make these transforms mutually inverse.
1393
1394 .. seealso::
1395
1396     :ocv:func:`dft`,
1397     :ocv:func:`dct`,
1398     :ocv:func:`idct`,
1399     :ocv:func:`mulSpectrums`,
1400     :ocv:func:`getOptimalDFTSize`
1401
1402
1403
1404 inRange
1405 -------
1406 Checks if array elements lie between the elements of two other arrays.
1407
1408 .. ocv:function:: void inRange(InputArray src, InputArray lowerb, InputArray upperb, OutputArray dst)
1409
1410 .. ocv:pyfunction:: cv2.inRange(src, lowerb, upperb[, dst]) -> dst
1411
1412 .. ocv:cfunction:: void cvInRange(const CvArr* src, const CvArr* lower, const CvArr* upper, CvArr* dst)
1413 .. ocv:cfunction:: void cvInRangeS(const CvArr* src, CvScalar lower, CvScalar upper, CvArr* dst)
1414 .. ocv:pyoldfunction:: cv.InRange(src, lower, upper, dst)-> None
1415 .. ocv:pyoldfunction:: cv.InRangeS(src, lower, upper, dst)-> None
1416
1417     :param src: first input array.
1418
1419     :param lowerb: inclusive lower boundary array or a scalar.
1420
1421     :param upperb: inclusive upper boundary array or a scalar.
1422
1423     :param dst: output array of the same size as ``src`` and ``CV_8U`` type.
1424
1425 The function checks the range as follows:
1426
1427  * For every element of a single-channel input array:
1428
1429    .. math::
1430
1431       \texttt{dst} (I)= \texttt{lowerb} (I)_0  \leq \texttt{src} (I)_0 \leq  \texttt{upperb} (I)_0
1432
1433  * For two-channel arrays:
1434
1435    .. math::
1436
1437       \texttt{dst} (I)= \texttt{lowerb} (I)_0  \leq \texttt{src} (I)_0 \leq  \texttt{upperb} (I)_0  \land \texttt{lowerb} (I)_1  \leq \texttt{src} (I)_1 \leq  \texttt{upperb} (I)_1
1438
1439  * and so forth.
1440
1441 That is, ``dst`` (I) is set to 255 (all ``1`` -bits) if ``src`` (I) is within the specified 1D, 2D, 3D, ... box and 0 otherwise.
1442
1443 When the lower and/or upper boundary parameters are scalars, the indexes ``(I)`` at ``lowerb`` and ``upperb`` in the above formulas should be omitted.
1444
1445
1446 invert
1447 ------
1448 Finds the inverse or pseudo-inverse of a matrix.
1449
1450 .. ocv:function:: double invert(InputArray src, OutputArray dst, int flags=DECOMP_LU)
1451
1452 .. ocv:pyfunction:: cv2.invert(src[, dst[, flags]]) -> retval, dst
1453
1454 .. ocv:cfunction:: double cvInvert( const CvArr* src, CvArr* dst, int method=CV_LU )
1455
1456 .. ocv:pyoldfunction:: cv.Invert(src, dst, method=CV_LU) -> float
1457
1458     :param src: input floating-point ``M x N`` matrix.
1459
1460     :param dst: output matrix of ``N x M`` size and the same type as ``src``.
1461
1462     :param flags: inversion method :
1463
1464             * **DECOMP_LU** Gaussian elimination with the optimal pivot element chosen.
1465
1466             * **DECOMP_SVD** singular value decomposition (SVD) method.
1467
1468             * **DECOMP_CHOLESKY** Cholesky decomposition; the matrix must be symmetrical and positively defined.
1469
1470 The function ``invert`` inverts the matrix ``src`` and stores the result in ``dst`` .
1471 When the matrix ``src`` is singular or non-square, the function calculates the pseudo-inverse matrix (the ``dst`` matrix) so that ``norm(src*dst - I)`` is minimal, where I is an identity matrix.
1472
1473 In case of the ``DECOMP_LU`` method, the function returns non-zero value if the inverse has been successfully calculated and 0 if ``src`` is singular.
1474
1475 In case of the ``DECOMP_SVD`` method, the function returns the inverse condition number of ``src`` (the ratio of the smallest singular value to the largest singular value) and 0 if ``src`` is singular. The SVD method calculates a pseudo-inverse matrix if ``src`` is singular.
1476
1477 Similarly to ``DECOMP_LU`` , the method ``DECOMP_CHOLESKY`` works only with non-singular square matrices that should also be symmetrical and positively defined. In this case, the function stores the inverted matrix in ``dst`` and returns non-zero. Otherwise, it returns 0.
1478
1479 .. seealso::
1480
1481     :ocv:func:`solve`,
1482     :ocv:class:`SVD`
1483
1484
1485
1486 log
1487 ---
1488 Calculates the natural logarithm of every array element.
1489
1490 .. ocv:function:: void log(InputArray src, OutputArray dst)
1491
1492 .. ocv:pyfunction:: cv2.log(src[, dst]) -> dst
1493
1494 .. ocv:cfunction:: void cvLog(const CvArr* src, CvArr* dst)
1495 .. ocv:pyoldfunction:: cv.Log(src, dst)-> None
1496
1497     :param src: input array.
1498
1499     :param dst: output array of the same size and type as  ``src`` .
1500
1501 The function ``log`` calculates the natural logarithm of the absolute value of every element of the input array:
1502
1503 .. math::
1504
1505     \texttt{dst} (I) =  \fork{\log |\texttt{src}(I)|}{if $\texttt{src}(I) \ne 0$ }{\texttt{C}}{otherwise}
1506
1507 where ``C`` is a large negative number (about -700 in the current implementation).
1508 The maximum relative error is about ``7e-6`` for single-precision input and less than ``1e-10`` for double-precision input. Special values (NaN, Inf) are not handled.
1509
1510 .. seealso::
1511
1512     :ocv:func:`exp`,
1513     :ocv:func:`cartToPolar`,
1514     :ocv:func:`polarToCart`,
1515     :ocv:func:`phase`,
1516     :ocv:func:`pow`,
1517     :ocv:func:`sqrt`,
1518     :ocv:func:`magnitude`
1519
1520
1521
1522 LUT
1523 ---
1524 Performs a look-up table transform of an array.
1525
1526 .. ocv:function:: void LUT( InputArray src, InputArray lut, OutputArray dst, int interpolation=0 )
1527
1528 .. ocv:pyfunction:: cv2.LUT(src, lut[, dst[, interpolation]]) -> dst
1529
1530 .. ocv:cfunction:: void cvLUT(const CvArr* src, CvArr* dst, const CvArr* lut)
1531 .. ocv:pyoldfunction:: cv.LUT(src, dst, lut)-> None
1532
1533     :param src: input array of 8-bit elements.
1534
1535     :param lut: look-up table of 256 elements; in case of multi-channel input array, the table should either have a single channel (in this case the same table is used for all channels) or the same number of channels as in the input array.
1536
1537     :param dst: output array of the same size and number of channels as ``src``, and the same depth as ``lut``.
1538
1539 The function ``LUT`` fills the output array with values from the look-up table. Indices of the entries are taken from the input array. That is, the function processes each element of ``src`` as follows:
1540
1541 .. math::
1542
1543     \texttt{dst} (I)  \leftarrow \texttt{lut(src(I) + d)}
1544
1545 where
1546
1547 .. math::
1548
1549     d =  \fork{0}{if \texttt{src} has depth \texttt{CV\_8U}}{128}{if \texttt{src} has depth \texttt{CV\_8S}}
1550
1551 .. seealso::
1552
1553     :ocv:func:`convertScaleAbs`,
1554     :ocv:func:`Mat::convertTo`
1555
1556
1557
1558 magnitude
1559 ---------
1560 Calculates the magnitude of 2D vectors.
1561
1562 .. ocv:function:: void magnitude(InputArray x, InputArray y, OutputArray magnitude)
1563
1564 .. ocv:pyfunction:: cv2.magnitude(x, y[, magnitude]) -> magnitude
1565
1566     :param x: floating-point array of x-coordinates of the vectors.
1567
1568     :param y: floating-point array of y-coordinates of the vectors; it must have the same size as ``x``.
1569
1570     :param magnitude: output array of the same size and type as ``x``.
1571
1572 The function ``magnitude`` calculates the magnitude of 2D vectors formed from the corresponding elements of ``x`` and ``y`` arrays:
1573
1574 .. math::
1575
1576     \texttt{dst} (I) =  \sqrt{\texttt{x}(I)^2 + \texttt{y}(I)^2}
1577
1578 .. seealso::
1579
1580     :ocv:func:`cartToPolar`,
1581     :ocv:func:`polarToCart`,
1582     :ocv:func:`phase`,
1583     :ocv:func:`sqrt`
1584
1585
1586
1587 Mahalanobis
1588 -----------
1589 Calculates the Mahalanobis distance between two vectors.
1590
1591 .. ocv:function:: double Mahalanobis( InputArray v1, InputArray v2, InputArray icovar )
1592
1593 .. ocv:pyfunction:: cv2.Mahalanobis(v1, v2, icovar) -> retval
1594
1595 .. ocv:cfunction:: double cvMahalanobis( const CvArr* vec1, const CvArr* vec2, const CvArr* mat )
1596
1597 .. ocv:pyoldfunction:: cv.Mahalonobis(vec1, vec2, mat) -> None
1598
1599     :param vec1: first 1D input vector.
1600
1601     :param vec2: second 1D input vector.
1602
1603     :param icovar: inverse covariance matrix.
1604
1605 The function ``Mahalanobis`` calculates and returns the weighted distance between two vectors:
1606
1607 .. math::
1608
1609     d( \texttt{vec1} , \texttt{vec2} )= \sqrt{\sum_{i,j}{\texttt{icovar(i,j)}\cdot(\texttt{vec1}(I)-\texttt{vec2}(I))\cdot(\texttt{vec1(j)}-\texttt{vec2(j)})} }
1610
1611 The covariance matrix may be calculated using the
1612 :ocv:func:`calcCovarMatrix` function and then inverted using the
1613 :ocv:func:`invert` function (preferably using the ``DECOMP_SVD`` method, as the most accurate).
1614
1615
1616
1617 max
1618 ---
1619 Calculates per-element maximum of two arrays or an array and a scalar.
1620
1621 .. ocv:function:: MatExpr max( const Mat& a, const Mat& b )
1622
1623 .. ocv:function:: MatExpr max( const Mat& a, double s )
1624
1625 .. ocv:function:: MatExpr max( double s, const Mat& a )
1626
1627 .. ocv:function:: void max(InputArray src1, InputArray src2, OutputArray dst)
1628
1629 .. ocv:function:: void max(const Mat& src1, const Mat& src2, Mat& dst)
1630
1631 .. ocv:function:: void max( const Mat& src1, double src2, Mat& dst )
1632
1633 .. ocv:pyfunction:: cv2.max(src1, src2[, dst]) -> dst
1634
1635 .. ocv:cfunction:: void cvMax(const CvArr* src1, const CvArr* src2, CvArr* dst)
1636 .. ocv:cfunction:: void cvMaxS(const CvArr* src, double value, CvArr* dst)
1637 .. ocv:pyoldfunction:: cv.Max(src1, src2, dst)-> None
1638 .. ocv:pyoldfunction:: cv.MaxS(src, value, dst)-> None
1639
1640     :param src1: first input array.
1641
1642     :param src2: second input array of the same size and type as  ``src1`` .
1643
1644     :param value: real scalar value.
1645
1646     :param dst: output array of the same size and type as ``src1``.
1647
1648 The functions ``max`` calculate the per-element maximum of two arrays:
1649
1650 .. math::
1651
1652     \texttt{dst} (I)= \max ( \texttt{src1} (I), \texttt{src2} (I))
1653
1654 or array and a scalar:
1655
1656 .. math::
1657
1658     \texttt{dst} (I)= \max ( \texttt{src1} (I), \texttt{value} )
1659
1660 In the second variant, when the input array is multi-channel, each channel is compared with ``value`` independently.
1661
1662 The first 3 variants of the function listed above are actually a part of
1663 :ref:`MatrixExpressions` . They return an expression object that can be further either transformed/ assigned to a matrix, or passed to a function, and so on.
1664
1665 .. seealso::
1666
1667     :ocv:func:`min`,
1668     :ocv:func:`compare`,
1669     :ocv:func:`inRange`,
1670     :ocv:func:`minMaxLoc`,
1671     :ref:`MatrixExpressions`
1672
1673
1674 mean
1675 ----
1676 Calculates an average (mean) of array elements.
1677
1678 .. ocv:function:: Scalar mean(InputArray src, InputArray mask=noArray())
1679
1680 .. ocv:pyfunction:: cv2.mean(src[, mask]) -> retval
1681
1682 .. ocv:cfunction:: CvScalar cvAvg( const CvArr* arr, const CvArr* mask=NULL )
1683
1684 .. ocv:pyoldfunction:: cv.Avg(arr, mask=None) -> scalar
1685
1686     :param src: input array that should have from 1 to 4 channels so that the result can be stored in :ocv:class:`Scalar_` .
1687
1688     :param mask: optional operation mask.
1689
1690 The function ``mean`` calculates the mean value ``M`` of array elements, independently for each channel, and return it:
1691
1692 .. math::
1693
1694     \begin{array}{l} N =  \sum _{I: \; \texttt{mask} (I) \ne 0} 1 \\ M_c =  \left ( \sum _{I: \; \texttt{mask} (I) \ne 0}{ \texttt{mtx} (I)_c} \right )/N \end{array}
1695
1696 When all the mask elements are 0's, the functions return ``Scalar::all(0)`` .
1697
1698 .. seealso::
1699
1700     :ocv:func:`countNonZero`,
1701     :ocv:func:`meanStdDev`,
1702     :ocv:func:`norm`,
1703     :ocv:func:`minMaxLoc`
1704
1705
1706
1707 meanStdDev
1708 ----------
1709 Calculates a mean and standard deviation of array elements.
1710
1711 .. ocv:function:: void meanStdDev(InputArray src, OutputArray mean, OutputArray stddev, InputArray mask=noArray())
1712
1713 .. ocv:pyfunction:: cv2.meanStdDev(src[, mean[, stddev[, mask]]]) -> mean, stddev
1714
1715 .. ocv:cfunction:: void cvAvgSdv( const CvArr* arr, CvScalar* mean, CvScalar* std_dev, const CvArr* mask=NULL )
1716
1717 .. ocv:pyoldfunction:: cv.AvgSdv(arr, mask=None) -> (mean, stdDev)
1718
1719     :param src: input array that should have from 1 to 4 channels so that the results can be stored in  :ocv:class:`Scalar_` 's.
1720
1721     :param mean: output parameter: calculated mean value.
1722
1723     :param stddev: output parameter: calculateded standard deviation.
1724
1725     :param mask: optional operation mask.
1726
1727 The function ``meanStdDev`` calculates the mean and the standard deviation ``M`` of array elements independently for each channel and returns it via the output parameters:
1728
1729 .. math::
1730
1731     \begin{array}{l} N =  \sum _{I, \texttt{mask} (I)  \ne 0} 1 \\ \texttt{mean} _c =  \frac{\sum_{ I: \; \texttt{mask}(I) \ne 0} \texttt{src} (I)_c}{N} \\ \texttt{stddev} _c =  \sqrt{\frac{\sum_{ I: \; \texttt{mask}(I) \ne 0} \left ( \texttt{src} (I)_c -  \texttt{mean} _c \right )^2}{N}} \end{array}
1732
1733 When all the mask elements are 0's, the functions return ``mean=stddev=Scalar::all(0)`` .
1734
1735 .. note:: The calculated standard deviation is only the diagonal of the complete normalized covariance matrix. If the full matrix is needed, you can reshape the multi-channel array ``M x N`` to the single-channel array ``M*N x mtx.channels()`` (only possible when the matrix is continuous) and then pass the matrix to :ocv:func:`calcCovarMatrix` .
1736
1737 .. seealso::
1738
1739     :ocv:func:`countNonZero`,
1740     :ocv:func:`mean`,
1741     :ocv:func:`norm`,
1742     :ocv:func:`minMaxLoc`,
1743     :ocv:func:`calcCovarMatrix`
1744
1745
1746
1747 merge
1748 -----
1749 Creates one multichannel array out of several single-channel ones.
1750
1751 .. ocv:function:: void merge(const Mat* mv, size_t count, OutputArray dst)
1752
1753 .. ocv:function:: void merge( InputArrayOfArrays mv, OutputArray dst )
1754
1755 .. ocv:pyfunction:: cv2.merge(mv[, dst]) -> dst
1756
1757 .. ocv:cfunction:: void cvMerge(const CvArr* src0, const CvArr* src1, const CvArr* src2, const CvArr* src3, CvArr* dst)
1758 .. ocv:pyoldfunction:: cv.Merge(src0, src1, src2, src3, dst)-> None
1759
1760     :param mv: input array or vector of matrices to be merged; all the matrices in ``mv`` must have the same size and the same depth.
1761
1762     :param count: number of input matrices when ``mv`` is a plain C array; it must be greater than zero.
1763
1764     :param dst: output array of the same size and the same depth as ``mv[0]``; The number of channels will be the total number of channels in the matrix array.
1765
1766 The functions ``merge`` merge several arrays to make a single multi-channel array. That is, each element of the output array will be a concatenation of the elements of the input arrays, where elements of i-th input array are treated as ``mv[i].channels()``-element vectors.
1767
1768 The function
1769 :ocv:func:`split` does the reverse operation. If you need to shuffle channels in some other advanced way, use
1770 :ocv:func:`mixChannels` .
1771
1772 .. seealso::
1773
1774     :ocv:func:`mixChannels`,
1775     :ocv:func:`split`,
1776     :ocv:func:`Mat::reshape`
1777
1778
1779
1780 min
1781 ---
1782 Calculates per-element minimum of two arrays or an array and a scalar.
1783
1784 .. ocv:function:: MatExpr min( const Mat& a, const Mat& b )
1785
1786 .. ocv:function:: MatExpr min( const Mat& a, double s )
1787
1788 .. ocv:function:: MatExpr min( double s, const Mat& a )
1789
1790 .. ocv:function:: void min(InputArray src1, InputArray src2, OutputArray dst)
1791
1792 .. ocv:function:: void min(const Mat& src1, const Mat& src2, Mat& dst)
1793
1794 .. ocv:function:: void min( const Mat& src1, double src2, Mat& dst )
1795
1796 .. ocv:pyfunction:: cv2.min(src1, src2[, dst]) -> dst
1797
1798 .. ocv:cfunction:: void cvMin(const CvArr* src1, const CvArr* src2, CvArr* dst)
1799 .. ocv:cfunction:: void cvMinS(const CvArr* src, double value, CvArr* dst)
1800 .. ocv:pyoldfunction:: cv.Min(src1, src2, dst)-> None
1801 .. ocv:pyoldfunction:: cv.MinS(src, value, dst)-> None
1802
1803     :param src1: first input array.
1804
1805     :param src2: second input array of the same size and type as ``src1``.
1806
1807     :param value: real scalar value.
1808
1809     :param dst: output array of the same size and type as ``src1``.
1810
1811 The functions ``min`` calculate the per-element minimum of two arrays:
1812
1813 .. math::
1814
1815     \texttt{dst} (I)= \min ( \texttt{src1} (I), \texttt{src2} (I))
1816
1817 or array and a scalar:
1818
1819 .. math::
1820
1821     \texttt{dst} (I)= \min ( \texttt{src1} (I), \texttt{value} )
1822
1823 In the second variant, when the input array is multi-channel, each channel is compared with ``value`` independently.
1824
1825 The first three variants of the function listed above are actually a part of
1826 :ref:`MatrixExpressions` . They return the expression object that can be further either transformed/assigned to a matrix, or passed to a function, and so on.
1827
1828 .. seealso::
1829
1830     :ocv:func:`max`,
1831     :ocv:func:`compare`,
1832     :ocv:func:`inRange`,
1833     :ocv:func:`minMaxLoc`,
1834     :ref:`MatrixExpressions`
1835
1836
1837 minMaxIdx
1838 ---------
1839 Finds the global minimum and maximum in an array
1840
1841 .. ocv:function:: void minMaxIdx(InputArray src, double* minVal, double* maxVal, int* minIdx=0, int* maxIdx=0, InputArray mask=noArray())
1842
1843     :param src: input single-channel array.
1844
1845     :param minVal: pointer to the returned minimum value; ``NULL`` is used if not required.
1846
1847     :param maxVal: pointer to the returned maximum value; ``NULL`` is used if not required.
1848
1849     :param minIdx: pointer to the returned minimum location (in nD case); ``NULL`` is used if not required; Otherwise, it must point to an array of ``src.dims`` elements, the coordinates of the minimum element in each dimension are stored there sequentially.
1850
1851         .. note::
1852
1853             When ``minIdx`` is not NULL, it must have at least 2 elements (as well as ``maxIdx``), even if ``src`` is a single-row or single-column matrix. In OpenCV (following MATLAB) each array has at least 2 dimensions, i.e. single-column matrix is ``Mx1`` matrix (and therefore ``minIdx``/``maxIdx`` will be ``(i1,0)``/``(i2,0)``) and single-row matrix is ``1xN`` matrix (and therefore ``minIdx``/``maxIdx`` will be ``(0,j1)``/``(0,j2)``).
1854
1855     :param maxIdx: pointer to the returned maximum location (in nD case). ``NULL`` is used if not required.
1856
1857     The function ``minMaxIdx`` finds the minimum and maximum element values and their positions. The extremums are searched across the whole array or, if ``mask`` is not an empty array, in the specified array region.
1858
1859     The function does not work with multi-channel arrays. If you need to find minimum or maximum elements across all the channels, use
1860     :ocv:func:`Mat::reshape` first to reinterpret the array as single-channel. Or you may extract the particular channel using either
1861     :ocv:func:`extractImageCOI` , or
1862     :ocv:func:`mixChannels` , or
1863     :ocv:func:`split` .
1864
1865     In case of a sparse matrix, the minimum is found among non-zero elements only.
1866
1867
1868
1869 minMaxLoc
1870 ---------
1871 Finds the global minimum and maximum in an array.
1872
1873 .. ocv:function:: void minMaxLoc(InputArray src, double* minVal, double* maxVal=0, Point* minLoc=0, Point* maxLoc=0, InputArray mask=noArray())
1874
1875 .. ocv:function:: void minMaxLoc( const SparseMat& a, double* minVal, double* maxVal, int* minIdx=0, int* maxIdx=0 )
1876
1877 .. ocv:pyfunction:: cv2.minMaxLoc(src[, mask]) -> minVal, maxVal, minLoc, maxLoc
1878
1879 .. ocv:cfunction:: void cvMinMaxLoc( const CvArr* arr, double* min_val, double* max_val, CvPoint* min_loc=NULL, CvPoint* max_loc=NULL, const CvArr* mask=NULL )
1880
1881 .. ocv:pyoldfunction:: cv.MinMaxLoc(arr, mask=None)-> (minVal, maxVal, minLoc, maxLoc)
1882
1883     :param src: input single-channel array.
1884
1885     :param minVal: pointer to the returned minimum value;  ``NULL`` is used if not required.
1886
1887     :param maxVal: pointer to the returned maximum value;  ``NULL`` is used if not required.
1888
1889     :param minLoc: pointer to the returned minimum location (in 2D case);  ``NULL`` is used if not required.
1890
1891     :param maxLoc: pointer to the returned maximum location (in 2D case);  ``NULL`` is used if not required.
1892
1893     :param mask: optional mask used to select a sub-array.
1894
1895 The functions ``minMaxLoc`` find the minimum and maximum element values and their positions. The extremums are searched across the whole array or,
1896 if ``mask`` is not an empty array, in the specified array region.
1897
1898 The functions do not work with multi-channel arrays. If you need to find minimum or maximum elements across all the channels, use
1899 :ocv:func:`Mat::reshape` first to reinterpret the array as single-channel. Or you may extract the particular channel using either
1900 :ocv:func:`extractImageCOI` , or
1901 :ocv:func:`mixChannels` , or
1902 :ocv:func:`split` .
1903
1904 .. seealso::
1905
1906     :ocv:func:`max`,
1907     :ocv:func:`min`,
1908     :ocv:func:`compare`,
1909     :ocv:func:`inRange`,
1910     :ocv:func:`extractImageCOI`,
1911     :ocv:func:`mixChannels`,
1912     :ocv:func:`split`,
1913     :ocv:func:`Mat::reshape`
1914
1915
1916
1917 mixChannels
1918 -----------
1919 Copies specified channels from input arrays to the specified channels of output arrays.
1920
1921 .. ocv:function:: void mixChannels( const Mat* src, size_t nsrcs, Mat* dst, size_t ndsts, const int* fromTo, size_t npairs )
1922
1923 .. ocv:function:: void mixChannels( const vector<Mat>& src, vector<Mat>& dst, const int* fromTo, size_t npairs )
1924
1925 .. ocv:pyfunction:: cv2.mixChannels(src, dst, fromTo) -> None
1926
1927 .. ocv:cfunction:: void cvMixChannels( const CvArr** src, int src_count, CvArr** dst, int dst_count, const int* from_to, int pair_count )
1928
1929 .. ocv:pyoldfunction:: cv.MixChannels(src, dst, fromTo) -> None
1930
1931     :param src: input array or vector of matricesl; all of the matrices must have the same size and the same depth.
1932
1933     :param nsrcs: number of matrices in ``src``.
1934
1935     :param dst: output array or vector of matrices; all the matrices *must be allocated*; their size and depth must be the same as in ``src[0]``.
1936
1937     :param ndsts: number of matrices in ``dst``.
1938
1939     :param fromTo: array of index pairs specifying which channels are copied and where; ``fromTo[k*2]`` is a 0-based index of the input channel in ``src``, ``fromTo[k*2+1]`` is an index of the output channel in ``dst``; the continuous channel numbering is used: the first input image channels are indexed from ``0`` to ``src[0].channels()-1``, the second input image channels are indexed from ``src[0].channels()`` to ``src[0].channels() + src[1].channels()-1``,  and so on, the same scheme is used for the output image channels; as a special case, when ``fromTo[k*2]`` is negative, the corresponding output channel is filled with zero .
1940
1941     :param npairs: number of index pairs in ``fromTo``.
1942
1943 The functions ``mixChannels`` provide an advanced mechanism for shuffling image channels.
1944
1945 :ocv:func:`split` and
1946 :ocv:func:`merge` and some forms of
1947 :ocv:func:`cvtColor` are partial cases of ``mixChannels`` .
1948
1949 In the example below, the code splits a 4-channel RGBA image into a 3-channel BGR (with R and B channels swapped) and a separate alpha-channel image: ::
1950
1951     Mat rgba( 100, 100, CV_8UC4, Scalar(1,2,3,4) );
1952     Mat bgr( rgba.rows, rgba.cols, CV_8UC3 );
1953     Mat alpha( rgba.rows, rgba.cols, CV_8UC1 );
1954
1955     // forming an array of matrices is a quite efficient operation,
1956     // because the matrix data is not copied, only the headers
1957     Mat out[] = { bgr, alpha };
1958     // rgba[0] -> bgr[2], rgba[1] -> bgr[1],
1959     // rgba[2] -> bgr[0], rgba[3] -> alpha[0]
1960     int from_to[] = { 0,2, 1,1, 2,0, 3,3 };
1961     mixChannels( &rgba, 1, out, 2, from_to, 4 );
1962
1963
1964 .. note:: Unlike many other new-style C++ functions in OpenCV (see the introduction section and :ocv:func:`Mat::create` ), ``mixChannels`` requires the output arrays to be pre-allocated before calling the function.
1965
1966 .. seealso::
1967
1968     :ocv:func:`split`,
1969     :ocv:func:`merge`,
1970     :ocv:func:`cvtColor`
1971
1972
1973
1974 mulSpectrums
1975 ------------
1976 Performs the per-element multiplication of two Fourier spectrums.
1977
1978 .. ocv:function:: void mulSpectrums( InputArray a, InputArray b, OutputArray c, int flags, bool conjB=false )
1979
1980 .. ocv:pyfunction:: cv2.mulSpectrums(a, b, flags[, c[, conjB]]) -> c
1981
1982 .. ocv:cfunction:: void cvMulSpectrums( const CvArr* src1, const CvArr* src2, CvArr* dst, int flags)
1983 .. ocv:pyoldfunction:: cv.MulSpectrums(src1, src2, dst, flags)-> None
1984
1985     :param src1: first input array.
1986
1987     :param src2: second input array of the same size and type as ``src1`` .
1988
1989     :param dst: output array of the same size and type as ``src1`` .
1990
1991     :param flags: operation flags; currently, the only supported flag is ``DFT_ROWS``, which indicates that each row of ``src1`` and ``src2`` is an independent 1D Fourier spectrum.
1992
1993     :param conjB: optional flag that conjugates the second input array before the multiplication (true) or not (false).
1994
1995 The function ``mulSpectrums`` performs the per-element multiplication of the two CCS-packed or complex matrices that are results of a real or complex Fourier transform.
1996
1997 The function, together with
1998 :ocv:func:`dft` and
1999 :ocv:func:`idft` , may be used to calculate convolution (pass ``conjB=false`` ) or correlation (pass ``conjB=true`` ) of two arrays rapidly. When the arrays are complex, they are simply multiplied (per element) with an optional conjugation of the second-array elements. When the arrays are real, they are assumed to be CCS-packed (see
2000 :ocv:func:`dft` for details).
2001
2002
2003
2004 multiply
2005 --------
2006 Calculates the per-element scaled product of two arrays.
2007
2008 .. ocv:function:: void multiply( InputArray src1, InputArray src2, OutputArray dst, double scale=1, int dtype=-1 )
2009
2010 .. ocv:pyfunction:: cv2.multiply(src1, src2[, dst[, scale[, dtype]]]) -> dst
2011
2012 .. ocv:cfunction:: void cvMul(const CvArr* src1, const CvArr* src2, CvArr* dst, double scale=1)
2013 .. ocv:pyoldfunction:: cv.Mul(src1, src2, dst, scale=1) -> None
2014
2015     :param src1: first input array.
2016
2017     :param src2: second input array of the same size and the same type as ``src1``.
2018
2019     :param dst: output array of the same size and type as ``src1``.
2020
2021     :param scale: optional scale factor.
2022
2023 The function ``multiply`` calculates the per-element product of two arrays:
2024
2025 .. math::
2026
2027     \texttt{dst} (I)= \texttt{saturate} ( \texttt{scale} \cdot \texttt{src1} (I)  \cdot \texttt{src2} (I))
2028
2029 There is also a
2030 :ref:`MatrixExpressions` -friendly variant of the first function. See
2031 :ocv:func:`Mat::mul` .
2032
2033 For a not-per-element matrix product, see
2034 :ocv:func:`gemm` .
2035
2036 .. note:: Saturation is not applied when the output array has the depth ``CV_32S``. You may even get result of an incorrect sign in the case of overflow.
2037
2038 .. seealso::
2039
2040     :ocv:func:`add`,
2041     :ocv:func:`subtract`,
2042     :ocv:func:`divide`,
2043     :ref:`MatrixExpressions`,
2044     :ocv:func:`scaleAdd`,
2045     :ocv:func:`addWeighted`,
2046     :ocv:func:`accumulate`,
2047     :ocv:func:`accumulateProduct`,
2048     :ocv:func:`accumulateSquare`,
2049     :ocv:func:`Mat::convertTo`
2050
2051
2052
2053 mulTransposed
2054 -------------
2055 Calculates the product of a matrix and its transposition.
2056
2057 .. ocv:function:: void mulTransposed( InputArray src, OutputArray dst, bool aTa, InputArray delta=noArray(), double scale=1, int dtype=-1 )
2058
2059 .. ocv:pyfunction:: cv2.mulTransposed(src, aTa[, dst[, delta[, scale[, dtype]]]]) -> dst
2060
2061 .. ocv:cfunction:: void cvMulTransposed( const CvArr* src, CvArr* dst, int order, const CvArr* delta=NULL, double scale=1. )
2062
2063 .. ocv:pyoldfunction:: cv.MulTransposed(src, dst, order, delta=None, scale=1.0) -> None
2064
2065     :param src: input single-channel matrix. Note that unlike :ocv:func:`gemm`, the function can multiply not only floating-point matrices.
2066
2067     :param dst: output square matrix.
2068
2069     :param aTa: Flag specifying the multiplication ordering. See the description below.
2070
2071     :param delta: Optional delta matrix subtracted from  ``src``  before the multiplication. When the matrix is empty ( ``delta=noArray()`` ), it is assumed to be zero, that is, nothing is subtracted. If it has the same size as  ``src`` , it is simply subtracted. Otherwise, it is "repeated" (see  :ocv:func:`repeat` ) to cover the full  ``src``  and then subtracted. Type of the delta matrix, when it is not empty, must be the same as the type of created output matrix. See the  ``dtype``  parameter description below.
2072
2073     :param scale: Optional scale factor for the matrix product.
2074
2075     :param dtype: Optional type of the output matrix. When it is negative, the output matrix will have the same type as  ``src`` . Otherwise, it will be ``type=CV_MAT_DEPTH(dtype)`` that should be either  ``CV_32F``  or  ``CV_64F`` .
2076
2077 The function ``mulTransposed`` calculates the product of ``src`` and its transposition:
2078
2079 .. math::
2080
2081     \texttt{dst} = \texttt{scale} ( \texttt{src} - \texttt{delta} )^T ( \texttt{src} - \texttt{delta} )
2082
2083 if ``aTa=true`` , and
2084
2085 .. math::
2086
2087     \texttt{dst} = \texttt{scale} ( \texttt{src} - \texttt{delta} ) ( \texttt{src} - \texttt{delta} )^T
2088
2089 otherwise. The function is used to calculate the covariance matrix. With zero delta, it can be used as a faster substitute for general matrix product ``A*B`` when ``B=A'``
2090
2091 .. seealso::
2092
2093     :ocv:func:`calcCovarMatrix`,
2094     :ocv:func:`gemm`,
2095     :ocv:func:`repeat`,
2096     :ocv:func:`reduce`
2097
2098
2099
2100 norm
2101 ----
2102 Calculates an absolute array norm, an absolute difference norm, or a relative difference norm.
2103
2104 .. ocv:function:: double norm(InputArray src1, int normType=NORM_L2, InputArray mask=noArray())
2105
2106 .. ocv:function:: double norm( InputArray src1, InputArray src2, int normType=NORM_L2, InputArray mask=noArray() )
2107
2108 .. ocv:function:: double norm( const SparseMat& src, int normType )
2109
2110 .. ocv:pyfunction:: cv2.norm(src1[, normType[, mask]]) -> retval
2111 .. ocv:pyfunction:: cv2.norm(src1, src2[, normType[, mask]]) -> retval
2112
2113 .. ocv:cfunction:: double cvNorm( const CvArr* arr1, const CvArr* arr2=NULL, int norm_type=CV_L2, const CvArr* mask=NULL )
2114
2115 .. ocv:pyoldfunction:: cv.Norm(arr1, arr2, normType=CV_L2, mask=None) -> float
2116
2117     :param src1: first input array.
2118
2119     :param src2: second input array of the same size and the same type as ``src1``.
2120
2121     :param normType: type of the norm (see the details below).
2122
2123     :param mask: optional operation mask; it must have the same size as ``src1`` and ``CV_8UC1`` type.
2124
2125 The functions ``norm`` calculate an absolute norm of ``src1`` (when there is no ``src2`` ):
2126
2127 .. math::
2128
2129     norm =  \forkthree{\|\texttt{src1}\|_{L_{\infty}} =  \max _I | \texttt{src1} (I)|}{if  $\texttt{normType} = \texttt{NORM\_INF}$ }
2130     { \| \texttt{src1} \| _{L_1} =  \sum _I | \texttt{src1} (I)|}{if  $\texttt{normType} = \texttt{NORM\_L1}$ }
2131     { \| \texttt{src1} \| _{L_2} =  \sqrt{\sum_I \texttt{src1}(I)^2} }{if  $\texttt{normType} = \texttt{NORM\_L2}$ }
2132
2133 or an absolute or relative difference norm if ``src2`` is there:
2134
2135 .. math::
2136
2137     norm =  \forkthree{\|\texttt{src1}-\texttt{src2}\|_{L_{\infty}} =  \max _I | \texttt{src1} (I) -  \texttt{src2} (I)|}{if  $\texttt{normType} = \texttt{NORM\_INF}$ }
2138     { \| \texttt{src1} - \texttt{src2} \| _{L_1} =  \sum _I | \texttt{src1} (I) -  \texttt{src2} (I)|}{if  $\texttt{normType} = \texttt{NORM\_L1}$ }
2139     { \| \texttt{src1} - \texttt{src2} \| _{L_2} =  \sqrt{\sum_I (\texttt{src1}(I) - \texttt{src2}(I))^2} }{if  $\texttt{normType} = \texttt{NORM\_L2}$ }
2140
2141 or
2142
2143 .. math::
2144
2145     norm =  \forkthree{\frac{\|\texttt{src1}-\texttt{src2}\|_{L_{\infty}}    }{\|\texttt{src2}\|_{L_{\infty}} }}{if  $\texttt{normType} = \texttt{NORM\_RELATIVE\_INF}$ }
2146     { \frac{\|\texttt{src1}-\texttt{src2}\|_{L_1} }{\|\texttt{src2}\|_{L_1}} }{if  $\texttt{normType} = \texttt{NORM\_RELATIVE\_L1}$ }
2147     { \frac{\|\texttt{src1}-\texttt{src2}\|_{L_2} }{\|\texttt{src2}\|_{L_2}} }{if  $\texttt{normType} = \texttt{NORM\_RELATIVE\_L2}$ }
2148
2149 The functions ``norm`` return the calculated norm.
2150
2151 When the ``mask`` parameter is specified and it is not empty, the norm is calculated only over the region specified by the mask.
2152
2153 A multi-channel input arrays are treated as a single-channel, that is, the results for all channels are combined.
2154
2155
2156
2157 normalize
2158 ---------
2159 Normalizes the norm or value range of an array.
2160
2161 .. ocv:function:: void normalize( InputArray src, OutputArray dst, double alpha=1, double beta=0, int norm_type=NORM_L2, int dtype=-1, InputArray mask=noArray() )
2162
2163 .. ocv:function:: void normalize(const SparseMat& src, SparseMat& dst, double alpha, int normType)
2164
2165 .. ocv:pyfunction:: cv2.normalize(src[, dst[, alpha[, beta[, norm_type[, dtype[, mask]]]]]]) -> dst
2166
2167     :param src: input array.
2168
2169     :param dst: output array of the same size as  ``src`` .
2170
2171     :param alpha: norm value to normalize to or the lower range boundary in case of the range normalization.
2172
2173     :param beta: upper range boundary in case of the range normalization; it is not used for the norm normalization.
2174
2175     :param normType: normalization type (see the details below).
2176
2177     :param dtype: when negative, the output array has the same type as ``src``; otherwise, it has the same number of channels as  ``src`` and the depth ``=CV_MAT_DEPTH(dtype)``.
2178
2179     :param mask: optional operation mask.
2180
2181
2182 The functions ``normalize`` scale and shift the input array elements so that
2183
2184 .. math::
2185
2186     \| \texttt{dst} \| _{L_p}= \texttt{alpha}
2187
2188 (where p=Inf, 1 or 2) when ``normType=NORM_INF``, ``NORM_L1``, or ``NORM_L2``, respectively; or so that
2189
2190 .. math::
2191
2192     \min _I  \texttt{dst} (I)= \texttt{alpha} , \, \, \max _I  \texttt{dst} (I)= \texttt{beta}
2193
2194 when ``normType=NORM_MINMAX`` (for dense arrays only).
2195 The optional mask specifies a sub-array to be normalized. This means that the norm or min-n-max are calculated over the sub-array, and then this sub-array is modified to be normalized. If you want to only use the mask to calculate the norm or min-max but modify the whole array, you can use
2196 :ocv:func:`norm` and
2197 :ocv:func:`Mat::convertTo`.
2198
2199 In case of sparse matrices, only the non-zero values are analyzed and transformed. Because of this, the range transformation for sparse matrices is not allowed since it can shift the zero level.
2200
2201 .. seealso::
2202
2203     :ocv:func:`norm`,
2204     :ocv:func:`Mat::convertTo`,
2205     :ocv:func:`SparseMat::convertTo`
2206
2207
2208
2209 PCA
2210 ---
2211 .. ocv:class:: PCA
2212
2213 Principal Component Analysis class.
2214
2215 The class is used to calculate a special basis for a set of vectors. The basis will consist of eigenvectors of the covariance matrix calculated from the input set of vectors. The class ``PCA`` can also transform vectors to/from the new coordinate space defined by the basis. Usually, in this new coordinate system, each vector from the original set (and any linear combination of such vectors) can be quite accurately approximated by taking its first few components, corresponding to the eigenvectors of the largest eigenvalues of the covariance matrix. Geometrically it means that you calculate a projection of the vector to a subspace formed by a few eigenvectors corresponding to the dominant eigenvalues of the covariance matrix. And usually such a projection is very close to the original vector. So, you can represent the original vector from a high-dimensional space with a much shorter vector consisting of the projected vector's coordinates in the subspace. Such a transformation is also known as Karhunen-Loeve Transform, or KLT. See
2216 http://en.wikipedia.org/wiki/Principal\_component\_analysis .
2217
2218 The sample below is the function that takes two matrices. The first function stores a set of vectors (a row per vector) that is used to calculate PCA. The second function stores another "test" set of vectors (a row per vector). First, these vectors are compressed with PCA, then reconstructed back, and then the reconstruction error norm is computed and printed for each vector. ::
2219
2220     PCA compressPCA(InputArray pcaset, int maxComponents,
2221                     const Mat& testset, OutputArray compressed)
2222     {
2223         PCA pca(pcaset, // pass the data
2224                 Mat(), // there is no pre-computed mean vector,
2225                        // so let the PCA engine to compute it
2226                 CV_PCA_DATA_AS_ROW, // indicate that the vectors
2227                                     // are stored as matrix rows
2228                                     // (use CV_PCA_DATA_AS_COL if the vectors are
2229                                     // the matrix columns)
2230                 maxComponents // specify how many principal components to retain
2231                 );
2232         // if there is no test data, just return the computed basis, ready-to-use
2233         if( !testset.data )
2234             return pca;
2235         CV_Assert( testset.cols == pcaset.cols );
2236
2237         compressed.create(testset.rows, maxComponents, testset.type());
2238
2239         Mat reconstructed;
2240         for( int i = 0; i < testset.rows; i++ )
2241         {
2242             Mat vec = testset.row(i), coeffs = compressed.row(i);
2243             // compress the vector, the result will be stored
2244             // in the i-th row of the output matrix
2245             pca.project(vec, coeffs);
2246             // and then reconstruct it
2247             pca.backProject(coeffs, reconstructed);
2248             // and measure the error
2249             printf("%d. diff = %g\n", i, norm(vec, reconstructed, NORM_L2));
2250         }
2251         return pca;
2252     }
2253
2254
2255 .. seealso::
2256
2257     :ocv:func:`calcCovarMatrix`,
2258     :ocv:func:`mulTransposed`,
2259     :ocv:class:`SVD`,
2260     :ocv:func:`dft`,
2261     :ocv:func:`dct`
2262
2263
2264
2265 PCA::PCA
2266 --------
2267 PCA constructors
2268
2269 .. ocv:function:: PCA::PCA()
2270
2271 .. ocv:function:: PCA::PCA(InputArray data, InputArray mean, int flags, int maxComponents=0)
2272
2273 .. ocv:function:: PCA::PCA(InputArray data, InputArray mean, int flags, double retainedVariance)
2274
2275     :param data: input samples stored as matrix rows or matrix columns.
2276
2277     :param mean: optional mean value; if the matrix is empty (``noArray()``), the mean is computed from the data.
2278
2279     :param flags: operation flags; currently the parameter is only used to specify the data layout:
2280
2281         * **CV_PCA_DATA_AS_ROW** indicates that the input samples are stored as matrix rows.
2282
2283         * **CV_PCA_DATA_AS_COL** indicates that the input samples are stored as matrix columns.
2284
2285     :param maxComponents: maximum number of components that PCA should retain; by default, all the components are retained.
2286
2287     :param retainedVariance: Percentage of variance that PCA should retain. Using this parameter will let the PCA decided how many components to retain but it will always keep at least 2.
2288
2289 The default constructor initializes an empty PCA structure. The other constructors initialize the structure and call
2290 :ocv:funcx:`PCA::operator()` .
2291
2292
2293
2294 PCA::operator ()
2295 ----------------
2296 Performs Principal Component Analysis of the supplied dataset.
2297
2298 .. ocv:function:: PCA& PCA::operator()(InputArray data, InputArray mean, int flags, int maxComponents=0)
2299
2300 .. ocv:function:: PCA& PCA::computeVar(InputArray data, InputArray mean, int flags, double retainedVariance)
2301
2302 .. ocv:pyfunction:: cv2.PCACompute(data[, mean[, eigenvectors[, maxComponents]]]) -> mean, eigenvectors
2303
2304 .. ocv:pyfunction:: cv2.PCAComputeVar(data, retainedVariance[, mean[, eigenvectors]]) -> mean, eigenvectors
2305
2306     :param data: input samples stored as the matrix rows or as the matrix columns.
2307
2308     :param mean: optional mean value; if the matrix is empty (``noArray()``), the mean is computed from the data.
2309
2310     :param flags: operation flags; currently the parameter is only used to specify the data layout.
2311
2312         * **CV_PCA_DATA_AS_ROW** indicates that the input samples are stored as matrix rows.
2313
2314         * **CV_PCA_DATA_AS_COL** indicates that the input samples are stored as matrix columns.
2315
2316     :param maxComponents: maximum number of components that PCA should retain; by default, all the components are retained.
2317
2318     :param retainedVariance: Percentage of variance that PCA should retain. Using this parameter will let the PCA decided how many components to retain but it will always keep at least 2.
2319
2320 The operator performs PCA of the supplied dataset. It is safe to reuse the same PCA structure for multiple datasets. That is, if the  structure has been previously used with another dataset, the existing internal data is reclaimed and the new ``eigenvalues``, ``eigenvectors`` , and ``mean`` are allocated and computed.
2321
2322 The computed eigenvalues are sorted from the largest to the smallest and the corresponding eigenvectors are stored as ``PCA::eigenvectors`` rows.
2323
2324
2325
2326 PCA::project
2327 ------------
2328 Projects vector(s) to the principal component subspace.
2329
2330 .. ocv:function:: Mat PCA::project(InputArray vec) const
2331
2332 .. ocv:function:: void PCA::project(InputArray vec, OutputArray result) const
2333
2334 .. ocv:pyfunction:: cv2.PCAProject(data, mean, eigenvectors[, result]) -> result
2335
2336     :param vec: input vector(s); must have the same dimensionality and the same layout as the input data used at PCA phase, that is, if ``CV_PCA_DATA_AS_ROW`` are specified, then ``vec.cols==data.cols`` (vector dimensionality) and ``vec.rows`` is the number of vectors to project, and the same is true for the ``CV_PCA_DATA_AS_COL`` case.
2337
2338     :param result: output vectors; in case of ``CV_PCA_DATA_AS_COL``, the output matrix has as many columns as the number of input vectors, this means that ``result.cols==vec.cols`` and the number of rows match the number of principal components (for example, ``maxComponents`` parameter passed to the constructor).
2339
2340 The methods project one or more vectors to the principal component subspace, where each vector projection is represented by coefficients in the principal component basis. The first form of the method returns the matrix that the second form writes to the result. So the first form can be used as a part of expression while the second form can be more efficient in a processing loop.
2341
2342
2343
2344 PCA::backProject
2345 ----------------
2346 Reconstructs vectors from their PC projections.
2347
2348 .. ocv:function:: Mat PCA::backProject(InputArray vec) const
2349
2350 .. ocv:function:: void PCA::backProject(InputArray vec, OutputArray result) const
2351
2352 .. ocv:pyfunction:: cv2.PCABackProject(data, mean, eigenvectors[, result]) -> result
2353
2354     :param vec: coordinates of the vectors in the principal component subspace, the layout and size are the same as of ``PCA::project`` output vectors.
2355
2356     :param result: reconstructed vectors; the layout and size are the same as of ``PCA::project`` input vectors.
2357
2358 The methods are inverse operations to
2359 :ocv:func:`PCA::project`. They take PC coordinates of projected vectors and reconstruct the original vectors. Unless all the principal components have been retained, the reconstructed vectors are different from the originals. But typically, the difference is small if the number of components is large enough (but still much smaller than the original vector dimensionality). As a result, PCA is used.
2360
2361
2362
2363 perspectiveTransform
2364 --------------------
2365 Performs the perspective matrix transformation of vectors.
2366
2367 .. ocv:function:: void perspectiveTransform( InputArray src, OutputArray dst, InputArray m )
2368
2369 .. ocv:pyfunction:: cv2.perspectiveTransform(src, m[, dst]) -> dst
2370
2371 .. ocv:cfunction:: void cvPerspectiveTransform(const CvArr* src, CvArr* dst, const CvMat* mat)
2372 .. ocv:pyoldfunction:: cv.PerspectiveTransform(src, dst, mat)-> None
2373
2374     :param src: input two-channel or three-channel floating-point array; each element is a 2D/3D vector to be transformed.
2375
2376     :param dst: output array of the same size and type as ``src``.
2377
2378     :param m: ``3x3`` or ``4x4`` floating-point transformation matrix.
2379
2380 The function ``perspectiveTransform`` transforms every element of ``src`` by treating it as a 2D or 3D vector, in the following way:
2381
2382 .. math::
2383
2384     (x, y, z)  \rightarrow (x'/w, y'/w, z'/w)
2385
2386 where
2387
2388 .. math::
2389
2390     (x', y', z', w') =  \texttt{mat} \cdot \begin{bmatrix} x & y & z & 1  \end{bmatrix}
2391
2392 and
2393
2394 .. math::
2395
2396     w =  \fork{w'}{if $w' \ne 0$}{\infty}{otherwise}
2397
2398 Here a 3D vector transformation is shown. In case of a 2D vector transformation, the ``z`` component is omitted.
2399
2400 .. note:: The function transforms a sparse set of 2D or 3D vectors. If you want to transform an image using perspective transformation, use :ocv:func:`warpPerspective` . If you have an inverse problem, that is, you want to compute the most probable perspective transformation out of several pairs of corresponding points, you can use :ocv:func:`getPerspectiveTransform` or :ocv:func:`findHomography` .
2401
2402 .. seealso::
2403
2404     :ocv:func:`transform`,
2405     :ocv:func:`warpPerspective`,
2406     :ocv:func:`getPerspectiveTransform`,
2407     :ocv:func:`findHomography`
2408
2409
2410
2411 phase
2412 -----
2413 Calculates the rotation angle of 2D vectors.
2414
2415 .. ocv:function:: void phase(InputArray x, InputArray y, OutputArray angle, bool angleInDegrees=false)
2416
2417 .. ocv:pyfunction:: cv2.phase(x, y[, angle[, angleInDegrees]]) -> angle
2418
2419     :param x: input floating-point array of x-coordinates of 2D vectors.
2420
2421     :param y: input array of y-coordinates of 2D vectors; it must have the same size and the same type as ``x``.
2422
2423     :param angle: output array of vector angles; it has the same size and same type as  ``x`` .
2424
2425     :param angleInDegrees: when true, the function calculates the angle in degrees, otherwise, they are measured in radians.
2426
2427 The function ``phase`` calculates the rotation angle of each 2D vector that is formed from the corresponding elements of ``x`` and ``y`` :
2428
2429 .. math::
2430
2431     \texttt{angle} (I) =  \texttt{atan2} ( \texttt{y} (I), \texttt{x} (I))
2432
2433 The angle estimation accuracy is about 0.3 degrees. When ``x(I)=y(I)=0`` , the corresponding ``angle(I)`` is set to 0.
2434
2435
2436 polarToCart
2437 -----------
2438 Calculates x and y coordinates of 2D vectors from their magnitude and angle.
2439
2440 .. ocv:function:: void polarToCart(InputArray magnitude, InputArray angle, OutputArray x, OutputArray y, bool angleInDegrees=false)
2441
2442 .. ocv:pyfunction:: cv2.polarToCart(magnitude, angle[, x[, y[, angleInDegrees]]]) -> x, y
2443
2444 .. ocv:cfunction:: void cvPolarToCart( const CvArr* magnitude, const CvArr* angle, CvArr* x, CvArr* y, int angle_in_degrees=0 )
2445
2446 .. ocv:pyoldfunction:: cv.PolarToCart(magnitude, angle, x, y, angleInDegrees=0)-> None
2447
2448     :param magnitude: input floating-point array of magnitudes of 2D vectors; it can be an empty matrix (``=Mat()``), in this case, the function assumes that all the magnitudes are =1; if it is not empty, it must have the same size and type as ``angle``.
2449
2450     :param angle: input floating-point array of angles of 2D vectors.
2451
2452     :param x: output array of x-coordinates of 2D vectors; it has the same size and type as ``angle``.
2453
2454     :param y: output array of y-coordinates of 2D vectors; it has the same size and type as ``angle``.
2455
2456     :param angleInDegrees: when true, the input angles are measured in degrees, otherwise, they are measured in radians.
2457
2458 The function ``polarToCart`` calculates the Cartesian coordinates of each 2D vector represented by the corresponding elements of ``magnitude`` and ``angle`` :
2459
2460 .. math::
2461
2462     \begin{array}{l} \texttt{x} (I) =  \texttt{magnitude} (I) \cos ( \texttt{angle} (I)) \\ \texttt{y} (I) =  \texttt{magnitude} (I) \sin ( \texttt{angle} (I)) \\ \end{array}
2463
2464 The relative accuracy of the estimated coordinates is about ``1e-6``.
2465
2466 .. seealso::
2467
2468     :ocv:func:`cartToPolar`,
2469     :ocv:func:`magnitude`,
2470     :ocv:func:`phase`,
2471     :ocv:func:`exp`,
2472     :ocv:func:`log`,
2473     :ocv:func:`pow`,
2474     :ocv:func:`sqrt`
2475
2476
2477
2478 pow
2479 ---
2480 Raises every array element to a power.
2481
2482 .. ocv:function:: void pow( InputArray src, double power, OutputArray dst )
2483
2484 .. ocv:pyfunction:: cv2.pow(src, power[, dst]) -> dst
2485
2486 .. ocv:cfunction:: void cvPow( const CvArr* src, CvArr* dst, double power)
2487 .. ocv:pyoldfunction:: cv.Pow(src, dst, power)-> None
2488
2489     :param src: input array.
2490
2491     :param power: exponent of power.
2492
2493     :param dst: output array of the same size and type as ``src``.
2494
2495 The function ``pow`` raises every element of the input array to ``power`` :
2496
2497 .. math::
2498
2499     \texttt{dst} (I) =  \fork{\texttt{src}(I)^power}{if \texttt{power} is integer}{|\texttt{src}(I)|^power}{otherwise}
2500
2501 So, for a non-integer power exponent, the absolute values of input array elements are used. However, it is possible to get true values for negative values using some extra operations. In the example below, computing the 5th root of array ``src``  shows: ::
2502
2503     Mat mask = src < 0;
2504     pow(src, 1./5, dst);
2505     subtract(Scalar::all(0), dst, dst, mask);
2506
2507
2508 For some values of ``power`` , such as integer values, 0.5 and -0.5, specialized faster algorithms are used.
2509
2510 Special values (NaN, Inf) are not handled.
2511
2512 .. seealso::
2513
2514     :ocv:func:`sqrt`,
2515     :ocv:func:`exp`,
2516     :ocv:func:`log`,
2517     :ocv:func:`cartToPolar`,
2518     :ocv:func:`polarToCart`
2519
2520
2521
2522 RNG
2523 ---
2524
2525 .. ocv:class:: RNG
2526
2527 Random number generator. It encapsulates the state (currently, a 64-bit integer) and has methods to return scalar random values and to fill arrays with random values. Currently it supports uniform and Gaussian (normal) distributions. The generator uses Multiply-With-Carry algorithm, introduced by G. Marsaglia (
2528 http://en.wikipedia.org/wiki/Multiply-with-carry
2529 ). Gaussian-distribution random numbers are generated using the Ziggurat algorithm (
2530 http://en.wikipedia.org/wiki/Ziggurat_algorithm
2531 ), introduced by G. Marsaglia and W. W. Tsang.
2532
2533
2534
2535 RNG::RNG
2536 --------
2537 The constructors
2538
2539 .. ocv:function:: RNG::RNG()
2540
2541 .. ocv:function:: RNG::RNG(uint64 state)
2542
2543     :param state: 64-bit value used to initialize the RNG.
2544
2545 These are the RNG constructors. The first form sets the state to some pre-defined value, equal to ``2**32-1`` in the current implementation. The second form sets the state to the specified value. If you passed ``state=0`` , the constructor uses the above default value instead to avoid the singular random number sequence, consisting of all zeros.
2546
2547
2548
2549 RNG::next
2550 ---------
2551 Returns the next random number.
2552
2553 .. ocv:function:: unsigned RNG::next()
2554
2555 The method updates the state using the MWC algorithm and returns the next 32-bit random number.
2556
2557
2558
2559 RNG::operator T
2560 ---------------
2561 Returns the next random number of the specified type.
2562
2563 .. ocv:function:: RNG::operator uchar()
2564
2565 .. ocv:function:: RNG::operator schar()
2566
2567 .. ocv:function:: RNG::operator ushort()
2568
2569 .. ocv:function:: RNG::operator short()
2570
2571 .. ocv:function:: RNG::operator int()
2572
2573 .. ocv:function:: RNG::operator unsigned()
2574
2575 .. ocv:function:: RNG::operator float()
2576
2577 .. ocv:function:: RNG::operator double()
2578
2579 Each of the methods updates the state using the MWC algorithm and returns the next random number of the specified type. In case of integer types, the returned number is from the available value range for the specified type. In case of floating-point types, the returned value is from ``[0,1)`` range.
2580
2581
2582
2583 RNG::operator ()
2584 ----------------
2585 Returns the next random number.
2586
2587 .. ocv:function:: unsigned RNG::operator ()()
2588
2589 .. ocv:function:: unsigned RNG::operator ()(unsigned N)
2590
2591     :param N: upper non-inclusive boundary of the returned random number.
2592
2593 The methods transform the state using the MWC algorithm and return the next random number. The first form is equivalent to
2594 :ocv:func:`RNG::next` . The second form returns the random number modulo ``N`` , which means that the result is in the range ``[0, N)`` .
2595
2596
2597
2598 RNG::uniform
2599 ------------
2600 Returns the next random number sampled from the uniform distribution.
2601
2602 .. ocv:function:: int RNG::uniform(int a, int b)
2603
2604 .. ocv:function:: float RNG::uniform(float a, float b)
2605
2606 .. ocv:function:: double RNG::uniform(double a, double b)
2607
2608     :param a: lower inclusive boundary of the returned random numbers.
2609
2610     :param b: upper non-inclusive boundary of the returned random numbers.
2611
2612 The methods transform the state using the MWC algorithm and return the next uniformly-distributed random number of the specified type, deduced from the input parameter type, from the range ``[a, b)`` . There is a nuance illustrated by the following sample: ::
2613
2614     RNG rng;
2615
2616     // always produces 0
2617     double a = rng.uniform(0, 1);
2618
2619     // produces double from [0, 1)
2620     double a1 = rng.uniform((double)0, (double)1);
2621
2622     // produces float from [0, 1)
2623     double b = rng.uniform(0.f, 1.f);
2624
2625     // produces double from [0, 1)
2626     double c = rng.uniform(0., 1.);
2627
2628     // may cause compiler error because of ambiguity:
2629     //  RNG::uniform(0, (int)0.999999)? or RNG::uniform((double)0, 0.99999)?
2630     double d = rng.uniform(0, 0.999999);
2631
2632
2633 The compiler does not take into account the type of the variable to which you assign the result of ``RNG::uniform`` . The only thing that matters to the compiler is the type of ``a`` and ``b`` parameters. So, if you want a floating-point random number, but the range boundaries are integer numbers, either put dots in the end, if they are constants, or use explicit type cast operators, as in the ``a1`` initialization above.
2634
2635
2636
2637 RNG::gaussian
2638 -------------
2639 Returns the next random number sampled from the Gaussian distribution.
2640
2641 .. ocv:function:: double RNG::gaussian(double sigma)
2642
2643     :param sigma: standard deviation of the distribution.
2644
2645 The method transforms the state using the MWC algorithm and returns the next random number from the Gaussian distribution ``N(0,sigma)`` . That is, the mean value of the returned random numbers is zero and the standard deviation is the specified ``sigma`` .
2646
2647
2648
2649 RNG::fill
2650 ---------
2651 Fills arrays with random numbers.
2652
2653 .. ocv:function:: void RNG::fill( InputOutputArray mat, int distType, InputArray a, InputArray b, bool saturateRange=false )
2654
2655     :param mat: 2D or N-dimensional matrix; currently matrices with more than 4 channels are not supported by the methods, use  :ocv:func:`Mat::reshape` as a possible workaround.
2656
2657     :param distType: distribution type, ``RNG::UNIFORM`` or ``RNG::NORMAL``.
2658
2659     :param a: first distribution parameter; in case of the uniform distribution, this is an inclusive lower boundary, in case of the normal distribution, this is a mean value.
2660
2661     :param b: second distribution parameter; in case of the uniform distribution, this is a non-inclusive upper boundary, in case of the normal distribution, this is a standard deviation (diagonal of the standard deviation matrix or the full standard deviation matrix).
2662
2663     :param saturateRange: pre-saturation flag; for uniform distribution only; if true, the method will first convert a and b to the acceptable value range (according to the mat datatype) and then will generate uniformly distributed random numbers within the range ``[saturate(a), saturate(b))``, if ``saturateRange=false``, the method will generate uniformly distributed random numbers in the original range ``[a, b)`` and then will saturate them, it means, for example, that ``theRNG().fill(mat_8u, RNG::UNIFORM, -DBL_MAX, DBL_MAX)`` will likely produce array mostly filled with 0's and 255's, since the range ``(0, 255)`` is significantly smaller than ``[-DBL_MAX, DBL_MAX)``.
2664
2665 Each of the methods fills the matrix with the random values from the specified distribution. As the new numbers are generated, the RNG state is updated accordingly. In case of multiple-channel images, every channel is filled independently, which means that RNG cannot generate samples from the multi-dimensional Gaussian distribution with non-diagonal covariance matrix directly. To do that, the method generates samples from multi-dimensional standard Gaussian distribution with zero mean and identity covariation matrix, and then transforms them using :ocv:func:`transform` to get samples from the specified Gaussian distribution.
2666
2667 randu
2668 -----
2669 Generates a single uniformly-distributed random number or an array of random numbers.
2670
2671 .. ocv:function:: template<typename _Tp> _Tp randu()
2672
2673 .. ocv:function:: void randu( InputOutputArray dst, InputArray low, InputArray high )
2674
2675 .. ocv:pyfunction:: cv2.randu(dst, low, high) -> None
2676
2677     :param dst: output array of random numbers; the array must be pre-allocated.
2678
2679     :param low: inclusive lower boundary of the generated random numbers.
2680
2681     :param high: exclusive upper boundary of the generated random numbers.
2682
2683 The template functions ``randu`` generate and return the next uniformly-distributed random value of the specified type. ``randu<int>()`` is an equivalent to ``(int)theRNG();`` , and so on. See
2684 :ocv:class:`RNG` description.
2685
2686 The second non-template variant of the function fills the matrix ``dst`` with uniformly-distributed random numbers from the specified range:
2687
2688 .. math::
2689
2690     \texttt{low} _c  \leq \texttt{dst} (I)_c <  \texttt{high} _c
2691
2692 .. seealso::
2693
2694     :ocv:class:`RNG`,
2695     :ocv:func:`randn`,
2696     :ocv:func:`theRNG`
2697
2698
2699
2700 randn
2701 -----
2702 Fills the array with normally distributed random numbers.
2703
2704 .. ocv:function:: void randn( InputOutputArray dst, InputArray mean, InputArray stddev )
2705
2706 .. ocv:pyfunction:: cv2.randn(dst, mean, stddev) -> None
2707
2708     :param dst: output array of random numbers; the array must be pre-allocated and have 1 to 4 channels.
2709
2710     :param mean: mean value (expectation) of the generated random numbers.
2711
2712     :param stddev: standard deviation of the generated random numbers; it can be either a vector (in which case a diagonal standard deviation matrix is assumed) or a square matrix.
2713
2714 The function ``randn`` fills the matrix ``dst`` with normally distributed random numbers with the specified mean vector and the standard deviation matrix. The generated random numbers are clipped to fit the value range of the output array data type.
2715
2716 .. seealso::
2717
2718     :ocv:class:`RNG`,
2719     :ocv:func:`randu`
2720
2721
2722
2723 randShuffle
2724 -----------
2725 Shuffles the array elements randomly.
2726
2727 .. ocv:function:: void randShuffle( InputOutputArray dst, double iterFactor=1., RNG* rng=0 )
2728
2729 .. ocv:pyfunction:: cv2.randShuffle(dst[, iterFactor]) -> None
2730
2731     :param dst: input/output numerical 1D array.
2732
2733     :param iterFactor: scale factor that determines the number of random swap operations (see the details below).
2734
2735     :param rng: optional random number generator used for shuffling; if it is zero, :ocv:func:`theRNG` () is used instead.
2736
2737 The function ``randShuffle`` shuffles the specified 1D array by randomly choosing pairs of elements and swapping them. The number of such swap operations will be ``dst.rows*dst.cols*iterFactor`` .
2738
2739 .. seealso::
2740
2741     :ocv:class:`RNG`,
2742     :ocv:func:`sort`
2743
2744
2745
2746 reduce
2747 ------
2748 Reduces a matrix to a vector.
2749
2750 .. ocv:function:: void reduce( InputArray src, OutputArray dst, int dim, int rtype, int dtype=-1 )
2751
2752 .. ocv:pyfunction:: cv2.reduce(src, dim, rtype[, dst[, dtype]]) -> dst
2753
2754 .. ocv:cfunction:: void cvReduce(const CvArr* src, CvArr* dst, int dim=-1, int op=CV_REDUCE_SUM)
2755 .. ocv:pyoldfunction:: cv.Reduce(src, dst, dim=-1, op=CV_REDUCE_SUM)-> None
2756
2757     :param src: input 2D matrix.
2758
2759     :param dst: output vector. Its size and type is defined by  ``dim``  and  ``dtype``  parameters.
2760
2761     :param dim: dimension index along which the matrix is reduced. 0 means that the matrix is reduced to a single row. 1 means that the matrix is reduced to a single column.
2762
2763     :param rtype: reduction operation that could be one of the following:
2764
2765             * **CV_REDUCE_SUM**: the output is the sum of all rows/columns of the matrix.
2766
2767             * **CV_REDUCE_AVG**: the output is the mean vector of all rows/columns of the matrix.
2768
2769             * **CV_REDUCE_MAX**: the output is the maximum (column/row-wise) of all rows/columns of the matrix.
2770
2771             * **CV_REDUCE_MIN**: the output is the minimum (column/row-wise) of all rows/columns of the matrix.
2772
2773     :param dtype: when negative, the output vector will have the same type as the input matrix, otherwise, its type will be ``CV_MAKE_TYPE(CV_MAT_DEPTH(dtype), src.channels())``.
2774
2775 The function ``reduce`` reduces the matrix to a vector by treating the matrix rows/columns as a set of 1D vectors and performing the specified operation on the vectors until a single row/column is obtained. For example, the function can be used to compute horizontal and vertical projections of a raster image. In case of ``CV_REDUCE_SUM`` and ``CV_REDUCE_AVG`` , the output may have a larger element bit-depth to preserve accuracy. And multi-channel arrays are also supported in these two reduction modes.
2776
2777 .. seealso:: :ocv:func:`repeat`
2778
2779
2780
2781 repeat
2782 ------
2783 Fills the output array with repeated copies of the input array.
2784
2785 .. ocv:function:: void repeat(InputArray src, int ny, int nx, OutputArray dst)
2786
2787 .. ocv:function:: Mat repeat( const Mat& src, int ny, int nx )
2788
2789 .. ocv:pyfunction:: cv2.repeat(src, ny, nx[, dst]) -> dst
2790
2791 .. ocv:cfunction:: void cvRepeat(const CvArr* src, CvArr* dst)
2792
2793 .. ocv:pyoldfunction:: cv.Repeat(src, dst)-> None
2794
2795     :param src: input array to replicate.
2796
2797     :param dst: output array of the same type as ``src``.
2798
2799     :param ny: Flag to specify how many times the ``src`` is repeated along the vertical axis.
2800
2801     :param nx: Flag to specify how many times the ``src`` is repeated along the horizontal axis.
2802
2803 The functions
2804 :ocv:func:`repeat` duplicate the input array one or more times along each of the two axes:
2805
2806 .. math::
2807
2808     \texttt{dst} _{ij}= \texttt{src} _{i\mod src.rows, \; j\mod src.cols }
2809
2810 The second variant of the function is more convenient to use with
2811 :ref:`MatrixExpressions` .
2812
2813 .. seealso::
2814
2815     :ocv:func:`reduce`,
2816     :ref:`MatrixExpressions`
2817
2818
2819
2820 scaleAdd
2821 --------
2822 Calculates the sum of a scaled array and another array.
2823
2824 .. ocv:function:: void scaleAdd( InputArray src1, double alpha, InputArray src2, OutputArray dst )
2825
2826 .. ocv:pyfunction:: cv2.scaleAdd(src1, alpha, src2[, dst]) -> dst
2827
2828 .. ocv:cfunction:: void cvScaleAdd(const CvArr* src1, CvScalar scale, const CvArr* src2, CvArr* dst)
2829 .. ocv:pyoldfunction:: cv.ScaleAdd(src1, scale, src2, dst)-> None
2830
2831     :param src1: first input array.
2832
2833     :param scale: scale factor for the first array.
2834
2835     :param src2: second input array of the same size and type as ``src1``.
2836
2837     :param dst: output array of the same size and type as ``src1``.
2838
2839 The function ``scaleAdd`` is one of the classical primitive linear algebra operations, known as ``DAXPY`` or ``SAXPY`` in `BLAS <http://en.wikipedia.org/wiki/Basic_Linear_Algebra_Subprograms>`_. It calculates the sum of a scaled array and another array:
2840
2841 .. math::
2842
2843     \texttt{dst} (I)= \texttt{scale} \cdot \texttt{src1} (I) +  \texttt{src2} (I)
2844
2845 The function can also be emulated with a matrix expression, for example: ::
2846
2847     Mat A(3, 3, CV_64F);
2848     ...
2849     A.row(0) = A.row(1)*2 + A.row(2);
2850
2851
2852 .. seealso::
2853
2854     :ocv:func:`add`,
2855     :ocv:func:`addWeighted`,
2856     :ocv:func:`subtract`,
2857     :ocv:func:`Mat::dot`,
2858     :ocv:func:`Mat::convertTo`,
2859     :ref:`MatrixExpressions`
2860
2861
2862
2863 setIdentity
2864 -----------
2865 Initializes a scaled identity matrix.
2866
2867 .. ocv:function:: void setIdentity( InputOutputArray mtx, const Scalar& s=Scalar(1) )
2868
2869 .. ocv:pyfunction:: cv2.setIdentity(mtx[, s]) -> None
2870
2871 .. ocv:cfunction:: void cvSetIdentity(CvArr* mat, CvScalar value=cvRealScalar(1))
2872
2873 .. ocv:pyoldfunction:: cv.SetIdentity(mat, value=1)-> None
2874
2875     :param mtx: matrix to initialize (not necessarily square).
2876
2877     :param value: value to assign to diagonal elements.
2878
2879 The function
2880 :ocv:func:`setIdentity` initializes a scaled identity matrix:
2881
2882 .. math::
2883
2884     \texttt{mtx} (i,j)= \fork{\texttt{value}}{ if $i=j$}{0}{otherwise}
2885
2886 The function can also be emulated using the matrix initializers and the matrix expressions: ::
2887
2888     Mat A = Mat::eye(4, 3, CV_32F)*5;
2889     // A will be set to [[5, 0, 0], [0, 5, 0], [0, 0, 5], [0, 0, 0]]
2890
2891
2892 .. seealso::
2893
2894     :ocv:func:`Mat::zeros`,
2895     :ocv:func:`Mat::ones`,
2896     :ref:`MatrixExpressions`,
2897     :ocv:func:`Mat::setTo`,
2898     :ocv:func:`Mat::operator=`
2899
2900
2901
2902 solve
2903 -----
2904 Solves one or more linear systems or least-squares problems.
2905
2906 .. ocv:function:: bool solve(InputArray src1, InputArray src2, OutputArray dst, int flags=DECOMP_LU)
2907
2908 .. ocv:pyfunction:: cv2.solve(src1, src2[, dst[, flags]]) -> retval, dst
2909
2910 .. ocv:cfunction:: int cvSolve(const CvArr* src1, const CvArr* src2, CvArr* dst, int method=CV_LU)
2911 .. ocv:pyoldfunction:: cv.Solve(A, B, X, method=CV_LU)-> None
2912
2913     :param src1: input matrix on the left-hand side of the system.
2914
2915     :param src2: input matrix on the right-hand side of the system.
2916
2917     :param dst: output solution.
2918
2919     :param flags: solution (matrix inversion) method.
2920
2921             * **DECOMP_LU** Gaussian elimination with optimal pivot element chosen.
2922
2923             * **DECOMP_CHOLESKY** Cholesky  :math:`LL^T`  factorization; the matrix ``src1`` must be symmetrical and positively defined.
2924
2925             * **DECOMP_EIG** eigenvalue decomposition; the matrix ``src1`` must be symmetrical.
2926
2927             * **DECOMP_SVD** singular value decomposition (SVD) method; the system can be over-defined and/or the matrix ``src1`` can be singular.
2928
2929             * **DECOMP_QR** QR factorization; the system can be over-defined and/or the matrix ``src1`` can be singular.
2930
2931             * **DECOMP_NORMAL** while all the previous flags are mutually exclusive, this flag can be used together with any of the previous; it means that the normal equations  :math:`\texttt{src1}^T\cdot\texttt{src1}\cdot\texttt{dst}=\texttt{src1}^T\texttt{src2}`  are solved instead of the original system  :math:`\texttt{src1}\cdot\texttt{dst}=\texttt{src2}` .
2932
2933 The function ``solve`` solves a linear system or least-squares problem (the latter is possible with SVD or QR methods, or by specifying the flag ``DECOMP_NORMAL`` ):
2934
2935 .. math::
2936
2937     \texttt{dst} =  \arg \min _X \| \texttt{src1} \cdot \texttt{X} -  \texttt{src2} \|
2938
2939 If ``DECOMP_LU`` or ``DECOMP_CHOLESKY`` method is used, the function returns 1 if ``src1`` (or
2940 :math:`\texttt{src1}^T\texttt{src1}` ) is non-singular. Otherwise, it returns 0. In the latter case, ``dst`` is not valid. Other methods find a pseudo-solution in case of a singular left-hand side part.
2941
2942 .. note:: If you want to find a unity-norm solution of an under-defined singular system :math:`\texttt{src1}\cdot\texttt{dst}=0` , the function ``solve`` will not do the work. Use :ocv:func:`SVD::solveZ` instead.
2943
2944 .. seealso::
2945
2946     :ocv:func:`invert`,
2947     :ocv:class:`SVD`,
2948     :ocv:func:`eigen`
2949
2950
2951
2952 solveCubic
2953 ----------
2954 Finds the real roots of a cubic equation.
2955
2956 .. ocv:function:: int solveCubic( InputArray coeffs, OutputArray roots )
2957
2958 .. ocv:pyfunction:: cv2.solveCubic(coeffs[, roots]) -> retval, roots
2959
2960 .. ocv:cfunction:: int cvSolveCubic( const CvMat* coeffs, CvMat* roots )
2961
2962 .. ocv:pyoldfunction:: cv.SolveCubic(coeffs, roots)-> None
2963
2964     :param coeffs: equation coefficients, an array of 3 or 4 elements.
2965
2966     :param roots: output array of real roots that has 1 or 3 elements.
2967
2968 The function ``solveCubic`` finds the real roots of a cubic equation:
2969
2970 * if ``coeffs`` is a 4-element vector:
2971
2972 .. math::
2973
2974     \texttt{coeffs} [0] x^3 +  \texttt{coeffs} [1] x^2 +  \texttt{coeffs} [2] x +  \texttt{coeffs} [3] = 0
2975
2976 * if ``coeffs`` is a 3-element vector:
2977
2978 .. math::
2979
2980     x^3 +  \texttt{coeffs} [0] x^2 +  \texttt{coeffs} [1] x +  \texttt{coeffs} [2] = 0
2981
2982 The roots are stored in the ``roots`` array.
2983
2984
2985
2986 solvePoly
2987 ---------
2988 Finds the real or complex roots of a polynomial equation.
2989
2990 .. ocv:function:: double solvePoly( InputArray coeffs, OutputArray roots, int maxIters=300 )
2991
2992 .. ocv:pyfunction:: cv2.solvePoly(coeffs[, roots[, maxIters]]) -> retval, roots
2993
2994     :param coeffs: array of polynomial coefficients.
2995
2996     :param roots: output (complex) array of roots.
2997
2998     :param maxIters: maximum number of iterations the algorithm does.
2999
3000 The function ``solvePoly`` finds real and complex roots of a polynomial equation:
3001
3002 .. math::
3003
3004     \texttt{coeffs} [n] x^{n} +  \texttt{coeffs} [n-1] x^{n-1} + ... +  \texttt{coeffs} [1] x +  \texttt{coeffs} [0] = 0
3005
3006
3007
3008 sort
3009 ----
3010 Sorts each row or each column of a matrix.
3011
3012 .. ocv:function:: void sort(InputArray src, OutputArray dst, int flags)
3013
3014 .. ocv:pyfunction:: cv2.sort(src, flags[, dst]) -> dst
3015
3016     :param src: input single-channel array.
3017
3018     :param dst: output array of the same size and type as ``src``.
3019
3020     :param flags: operation flags, a combination of the following values:
3021
3022             * **CV_SORT_EVERY_ROW** each matrix row is sorted independently.
3023
3024             * **CV_SORT_EVERY_COLUMN** each matrix column is sorted independently; this flag and the previous one are mutually exclusive.
3025
3026             * **CV_SORT_ASCENDING** each matrix row is sorted in the ascending order.
3027
3028             * **CV_SORT_DESCENDING** each matrix row is sorted in the descending order; this flag and the previous one are also mutually exclusive.
3029
3030 The function ``sort`` sorts each matrix row or each matrix column in ascending or descending order. So you should pass two operation flags to get desired behaviour. If you want to sort matrix rows or columns lexicographically, you can use STL ``std::sort`` generic function with the proper comparison predicate.
3031
3032 .. seealso::
3033
3034     :ocv:func:`sortIdx`,
3035     :ocv:func:`randShuffle`
3036
3037
3038
3039 sortIdx
3040 -------
3041 Sorts each row or each column of a matrix.
3042
3043 .. ocv:function:: void sortIdx(InputArray src, OutputArray dst, int flags)
3044
3045 .. ocv:pyfunction:: cv2.sortIdx(src, flags[, dst]) -> dst
3046
3047     :param src: input single-channel array.
3048
3049     :param dst: output integer array of the same size as ``src``.
3050
3051     :param flags: operation flags that could be a combination of the following values:
3052
3053             * **CV_SORT_EVERY_ROW** each matrix row is sorted independently.
3054
3055             * **CV_SORT_EVERY_COLUMN** each matrix column is sorted independently; this flag and the previous one are mutually exclusive.
3056
3057             * **CV_SORT_ASCENDING** each matrix row is sorted in the ascending order.
3058
3059             * **CV_SORT_DESCENDING** each matrix row is sorted in the descending order; his flag and the previous one are also mutually exclusive.
3060
3061 The function ``sortIdx`` sorts each matrix row or each matrix column in the ascending or descending order. So you should pass two operation flags to get desired behaviour. Instead of reordering the elements themselves, it stores the indices of sorted elements in the output array. For example: ::
3062
3063     Mat A = Mat::eye(3,3,CV_32F), B;
3064     sortIdx(A, B, CV_SORT_EVERY_ROW + CV_SORT_ASCENDING);
3065     // B will probably contain
3066     // (because of equal elements in A some permutations are possible):
3067     // [[1, 2, 0], [0, 2, 1], [0, 1, 2]]
3068
3069
3070 .. seealso::
3071
3072     :ocv:func:`sort`,
3073     :ocv:func:`randShuffle`
3074
3075
3076
3077 split
3078 -----
3079 Divides a multi-channel array into several single-channel arrays.
3080
3081 .. ocv:function:: void split( const Mat& src, Mat* mvbegin )
3082
3083 .. ocv:function:: void split( InputArray m, OutputArrayOfArrays mv )
3084
3085 .. ocv:pyfunction:: cv2.split(m[, mv]) -> mv
3086
3087 .. ocv:cfunction:: void cvSplit(const CvArr* src, CvArr* dst0, CvArr* dst1, CvArr* dst2, CvArr* dst3)
3088
3089 .. ocv:pyoldfunction:: cv.Split(src, dst0, dst1, dst2, dst3)-> None
3090
3091     :param src: input multi-channel array.
3092
3093     :param mv: output array or vector of arrays; in the first variant of the function the number of arrays must match ``src.channels()``; the arrays themselves are reallocated, if needed.
3094
3095 The functions ``split`` split a multi-channel array into separate single-channel arrays:
3096
3097 .. math::
3098
3099     \texttt{mv} [c](I) =  \texttt{src} (I)_c
3100
3101 If you need to extract a single channel or do some other sophisticated channel permutation, use
3102 :ocv:func:`mixChannels` .
3103
3104 .. seealso::
3105
3106     :ocv:func:`merge`,
3107     :ocv:func:`mixChannels`,
3108     :ocv:func:`cvtColor`
3109
3110
3111
3112 sqrt
3113 ----
3114 Calculates a square root of array elements.
3115
3116 .. ocv:function:: void sqrt(InputArray src, OutputArray dst)
3117
3118 .. ocv:pyfunction:: cv2.sqrt(src[, dst]) -> dst
3119
3120 .. ocv:cfunction:: float cvSqrt(float value)
3121 .. ocv:pyoldfunction:: cv.Sqrt(value)-> float
3122
3123     :param src: input floating-point array.
3124
3125     :param dst: output array of the same size and type as ``src``.
3126
3127 The functions ``sqrt`` calculate a square root of each input array element. In case of multi-channel arrays, each channel is processed independently. The accuracy is approximately the same as of the built-in ``std::sqrt`` .
3128
3129 .. seealso::
3130
3131     :ocv:func:`pow`,
3132     :ocv:func:`magnitude`
3133
3134
3135
3136 subtract
3137 --------
3138 Calculates the per-element difference between two arrays or array and a scalar.
3139
3140 .. ocv:function:: void subtract(InputArray src1, InputArray src2, OutputArray dst, InputArray mask=noArray(), int dtype=-1)
3141
3142 .. ocv:pyfunction:: cv2.subtract(src1, src2[, dst[, mask[, dtype]]]) -> dst
3143
3144 .. ocv:cfunction:: void cvSub(const CvArr* src1, const CvArr* src2, CvArr* dst, const CvArr* mask=NULL)
3145 .. ocv:cfunction:: void cvSubRS( const CvArr* src, CvScalar value, CvArr* dst, const CvArr* mask=NULL )
3146 .. ocv:cfunction:: void cvSubS( const CvArr* src, CvScalar value, CvArr* dst, const CvArr* mask=NULL )
3147
3148 .. ocv:pyoldfunction:: cv.Sub(src1, src2, dst, mask=None) -> None
3149 .. ocv:pyoldfunction:: cv.SubRS(src, value, dst, mask=None) -> None
3150 .. ocv:pyoldfunction:: cv.SubS(src, value, dst, mask=None) -> None
3151
3152     :param src1: first input array or a scalar.
3153
3154     :param src2: second input array or a scalar.
3155
3156     :param dst: output array of the same size and the same number of channels as the input array.
3157
3158     :param mask: optional operation mask; this is an 8-bit single channel array that specifies elements of the output array to be changed.
3159
3160     :param dtype: optional depth of the output array (see the details below).
3161
3162 The function ``subtract`` calculates:
3163
3164  *
3165     Difference between two arrays, when both input arrays have the same size and the same number of channels:
3166
3167     .. math::
3168
3169         \texttt{dst}(I) =  \texttt{saturate} ( \texttt{src1}(I) -  \texttt{src2}(I)) \quad \texttt{if mask}(I) \ne0
3170
3171  *
3172     Difference between an array and a scalar, when ``src2`` is constructed from ``Scalar`` or has the same number of elements as ``src1.channels()``:
3173
3174     .. math::
3175
3176         \texttt{dst}(I) =  \texttt{saturate} ( \texttt{src1}(I) -  \texttt{src2} ) \quad \texttt{if mask}(I) \ne0
3177
3178  *
3179     Difference between a scalar and an array, when ``src1`` is constructed from ``Scalar`` or has the same number of elements as ``src2.channels()``:
3180
3181     .. math::
3182
3183         \texttt{dst}(I) =  \texttt{saturate} ( \texttt{src1} -  \texttt{src2}(I) ) \quad \texttt{if mask}(I) \ne0
3184
3185  *
3186     The reverse difference between a scalar and an array in the case of ``SubRS``:
3187
3188     .. math::
3189
3190         \texttt{dst}(I) =  \texttt{saturate} ( \texttt{src2} -  \texttt{src1}(I) ) \quad \texttt{if mask}(I) \ne0
3191
3192 where ``I`` is a multi-dimensional index of array elements. In case of multi-channel arrays, each channel is processed independently.
3193
3194 The first function in the list above can be replaced with matrix expressions: ::
3195
3196     dst = src1 - src2;
3197     dst -= src1; // equivalent to subtract(dst, src1, dst);
3198
3199 The input arrays and the output array can all have the same or different depths. For example, you can subtract to 8-bit unsigned arrays and store the difference in a 16-bit signed array. Depth of the output array is determined by ``dtype`` parameter. In the second and third cases above, as well as in the first case, when ``src1.depth() == src2.depth()``, ``dtype`` can be set to the default ``-1``. In this case the output array will have the same depth as the input array, be it ``src1``, ``src2`` or both.
3200
3201 .. note:: Saturation is not applied when the output array has the depth ``CV_32S``. You may even get result of an incorrect sign in the case of overflow.
3202
3203 .. seealso::
3204
3205     :ocv:func:`add`,
3206     :ocv:func:`addWeighted`,
3207     :ocv:func:`scaleAdd`,
3208     :ocv:func:`Mat::convertTo`,
3209     :ref:`MatrixExpressions`
3210
3211
3212
3213 SVD
3214 ---
3215 .. ocv:class:: SVD
3216
3217 Class for computing Singular Value Decomposition of a floating-point matrix. The Singular Value Decomposition is used to solve least-square problems, under-determined linear systems, invert matrices, compute condition numbers, and so on.
3218
3219 For a faster operation, you can pass ``flags=SVD::MODIFY_A|...`` to modify the decomposed matrix when it is not necessary to preserve it. If you want to compute a condition number of a matrix or an absolute value of its determinant, you do not need ``u`` and ``vt`` . You can pass ``flags=SVD::NO_UV|...`` . Another flag ``FULL_UV`` indicates that full-size ``u`` and ``vt`` must be computed, which is not necessary most of the time.
3220
3221 .. seealso::
3222
3223     :ocv:func:`invert`,
3224     :ocv:func:`solve`,
3225     :ocv:func:`eigen`,
3226     :ocv:func:`determinant`
3227
3228
3229
3230 SVD::SVD
3231 --------
3232 The constructors.
3233
3234 .. ocv:function:: SVD::SVD()
3235
3236 .. ocv:function:: SVD::SVD( InputArray src, int flags=0 )
3237
3238     :param src: decomposed matrix.
3239
3240     :param flags: operation flags.
3241
3242         * **SVD::MODIFY_A** use the algorithm to modify the decomposed matrix; it can save space and speed up processing.
3243
3244         * **SVD::NO_UV** indicates that only a vector of singular values ``w`` is to be processed, while ``u`` and ``vt`` will be set to empty matrices.
3245
3246         * **SVD::FULL_UV** when the matrix is not square, by default the algorithm produces ``u`` and ``vt`` matrices of sufficiently large size for the further ``A`` reconstruction; if, however,   ``FULL_UV`` flag is specified, ``u`` and ``vt`` will be full-size square orthogonal matrices.
3247
3248 The first constructor initializes an empty ``SVD`` structure. The second constructor initializes an empty ``SVD`` structure and then calls
3249 :ocv:funcx:`SVD::operator()` .
3250
3251
3252 SVD::operator ()
3253 ----------------
3254 Performs SVD of a matrix.
3255
3256 .. ocv:function:: SVD& SVD::operator()( InputArray src, int flags=0 )
3257
3258     :param src: decomposed matrix.
3259
3260     :param flags: operation flags.
3261
3262         * **SVD::MODIFY_A** use the algorithm to modify the decomposed matrix; it can save space and speed up processing.
3263
3264         * **SVD::NO_UV** use only singular values; the algorithm does not compute ``u`` and ``vt`` matrices.
3265
3266         * **SVD::FULL_UV** when the matrix is not square, by default the algorithm produces ``u`` and ``vt`` matrices of sufficiently large size for the further ``A`` reconstruction; if, however, the ``FULL_UV``  flag is specified, ``u``  and  ``vt``  are full-size square orthogonal matrices.
3267
3268 The operator performs the singular value decomposition of the supplied matrix. The ``u``,``vt`` , and the vector of singular values ``w`` are stored in the structure. The same ``SVD`` structure can be reused many times with different matrices. Each time, if needed, the previous ``u``,``vt`` , and ``w`` are reclaimed and the new matrices are created, which is all handled by
3269 :ocv:func:`Mat::create` .
3270
3271
3272 SVD::compute
3273 ------------
3274 Performs SVD of a matrix
3275
3276 .. ocv:function:: static void SVD::compute( InputArray src, OutputArray w, OutputArray u, OutputArray vt, int flags=0 )
3277
3278 .. ocv:function:: static void SVD::compute( InputArray src, OutputArray w, int flags=0 )
3279
3280 .. ocv:pyfunction:: cv2.SVDecomp(src[, w[, u[, vt[, flags]]]]) -> w, u, vt
3281
3282 .. ocv:cfunction:: void cvSVD( CvArr* A, CvArr* W, CvArr* U=NULL, CvArr* V=NULL, int flags=0 )
3283
3284 .. ocv:pyoldfunction:: cv.SVD(A, W, U=None, V=None, flags=0) -> None
3285
3286     :param src: decomposed matrix
3287
3288     :param w: calculated singular values
3289
3290     :param u: calculated left singular vectors
3291
3292     :param V: calculated right singular vectors
3293
3294     :param vt: transposed matrix of right singular values
3295
3296     :param flags: operation flags - see :ocv:func:`SVD::SVD`.
3297
3298 The methods/functions perform SVD of matrix. Unlike ``SVD::SVD`` constructor and ``SVD::operator()``, they store the results to the user-provided matrices. ::
3299
3300     Mat A, w, u, vt;
3301     SVD::compute(A, w, u, vt);
3302
3303
3304 SVD::solveZ
3305 -----------
3306 Solves an under-determined singular linear system.
3307
3308 .. ocv:function:: static void SVD::solveZ( InputArray src, OutputArray dst )
3309
3310     :param src: left-hand-side matrix.
3311
3312     :param dst: found solution.
3313
3314 The method finds a unit-length solution ``x`` of a singular linear system
3315 ``A*x = 0``. Depending on the rank of ``A``, there can be no solutions, a single solution or an infinite number of solutions. In general, the algorithm solves the following problem:
3316
3317 .. math::
3318
3319     dst =  \arg \min _{x:  \| x \| =1}  \| src  \cdot x  \|
3320
3321
3322 SVD::backSubst
3323 --------------
3324 Performs a singular value back substitution.
3325
3326 .. ocv:function:: void SVD::backSubst( InputArray rhs, OutputArray dst ) const
3327
3328 .. ocv:function:: static void SVD::backSubst( InputArray w, InputArray u, InputArray vt, InputArray rhs, OutputArray dst )
3329
3330 .. ocv:pyfunction:: cv2.SVBackSubst(w, u, vt, rhs[, dst]) -> dst
3331
3332 .. ocv:cfunction:: void cvSVBkSb( const CvArr* W, const CvArr* U, const CvArr* V, const CvArr* B, CvArr* X, int flags )
3333
3334 .. ocv:pyoldfunction:: cv.SVBkSb(W, U, V, B, X, flags) -> None
3335
3336     :param w: singular values
3337
3338     :param u: left singular vectors
3339
3340     :param V: right singular vectors
3341
3342     :param vt: transposed matrix of right singular vectors.
3343
3344     :param rhs: right-hand side of a linear system ``(u*w*v')*dst = rhs`` to be solved, where ``A`` has been previously decomposed.
3345
3346     :param dst: found solution of the system.
3347
3348 The method calculates a back substitution for the specified right-hand side:
3349
3350 .. math::
3351
3352     \texttt{x} =  \texttt{vt} ^T  \cdot diag( \texttt{w} )^{-1}  \cdot \texttt{u} ^T  \cdot \texttt{rhs} \sim \texttt{A} ^{-1}  \cdot \texttt{rhs}
3353
3354 Using this technique you can either get a very accurate solution of the convenient linear system, or the best (in the least-squares terms) pseudo-solution of an overdetermined linear system.
3355
3356 .. note:: Explicit SVD with the further back substitution only makes sense if you need to solve many linear systems with the same left-hand side (for example, ``src`` ). If all you need is to solve a single system (possibly with multiple ``rhs`` immediately available), simply call :ocv:func:`solve` add pass ``DECOMP_SVD`` there. It does absolutely the same thing.
3357
3358
3359
3360 sum
3361 ---
3362 Calculates the sum of array elements.
3363
3364 .. ocv:function:: Scalar sum( InputArray src )
3365
3366 .. ocv:pyfunction:: cv2.sumElems(src) -> retval
3367
3368 .. ocv:cfunction:: CvScalar cvSum(const CvArr* arr)
3369
3370 .. ocv:pyoldfunction:: cv.Sum(arr) -> scalar
3371
3372     :param arr: input array that must have from 1 to 4 channels.
3373
3374 The functions ``sum`` calculate and return the sum of array elements, independently for each channel.
3375
3376 .. seealso::
3377
3378     :ocv:func:`countNonZero`,
3379     :ocv:func:`mean`,
3380     :ocv:func:`meanStdDev`,
3381     :ocv:func:`norm`,
3382     :ocv:func:`minMaxLoc`,
3383     :ocv:func:`reduce`
3384
3385
3386
3387 theRNG
3388 ------
3389 Returns the default random number generator.
3390
3391 .. ocv:function:: RNG& theRNG()
3392
3393 The function ``theRNG`` returns the default random number generator. For each thread, there is a separate random number generator, so you can use the function safely in multi-thread environments. If you just need to get a single random number using this generator or initialize an array, you can use
3394 :ocv:func:`randu` or
3395 :ocv:func:`randn` instead. But if you are going to generate many random numbers inside a loop, it is much faster to use this function to retrieve the generator and then use ``RNG::operator _Tp()`` .
3396
3397 .. seealso::
3398
3399     :ocv:class:`RNG`,
3400     :ocv:func:`randu`,
3401     :ocv:func:`randn`
3402
3403
3404
3405 trace
3406 -----
3407 Returns the trace of a matrix.
3408
3409 .. ocv:function:: Scalar trace( InputArray mtx )
3410
3411 .. ocv:pyfunction:: cv2.trace(mtx) -> retval
3412
3413 .. ocv:cfunction:: CvScalar cvTrace(const CvArr* mat)
3414
3415 .. ocv:pyoldfunction:: cv.Trace(mat) -> scalar
3416
3417     :param mat: input matrix.
3418
3419 The function ``trace`` returns the sum of the diagonal elements of the matrix ``mtx`` .
3420
3421 .. math::
3422
3423     \mathrm{tr} ( \texttt{mtx} ) =  \sum _i  \texttt{mtx} (i,i)
3424
3425
3426
3427 transform
3428 ---------
3429 Performs the matrix transformation of every array element.
3430
3431 .. ocv:function:: void transform( InputArray src, OutputArray dst, InputArray m )
3432
3433 .. ocv:pyfunction:: cv2.transform(src, m[, dst]) -> dst
3434
3435 .. ocv:cfunction:: void cvTransform( const CvArr* src, CvArr* dst, const CvMat* transmat, const CvMat* shiftvec=NULL )
3436
3437 .. ocv:pyoldfunction:: cv.Transform(src, dst, transmat, shiftvec=None)-> None
3438
3439     :param src: input array that must have as many channels (1 to 4) as ``m.cols`` or ``m.cols-1``.
3440
3441     :param dst: output array of the same size and depth as ``src``; it has as many channels as ``m.rows``.
3442
3443     :param m: transformation ``2x2`` or ``2x3`` floating-point matrix.
3444
3445     :param shiftvec: optional translation vector (when ``m`` is ``2x2``)
3446
3447 The function ``transform`` performs the matrix transformation of every element of the array ``src`` and stores the results in ``dst`` :
3448
3449 .. math::
3450
3451     \texttt{dst} (I) =  \texttt{m} \cdot \texttt{src} (I)
3452
3453 (when ``m.cols=src.channels()`` ), or
3454
3455 .. math::
3456
3457     \texttt{dst} (I) =  \texttt{m} \cdot [ \texttt{src} (I); 1]
3458
3459 (when ``m.cols=src.channels()+1`` )
3460
3461 Every element of the ``N`` -channel array ``src`` is interpreted as ``N`` -element vector that is transformed using
3462 the ``M x N`` or ``M x (N+1)`` matrix ``m``
3463 to ``M``-element vector - the corresponding element of the output array ``dst`` .
3464
3465 The function may be used for geometrical transformation of
3466 ``N`` -dimensional
3467 points, arbitrary linear color space transformation (such as various kinds of RGB to YUV transforms), shuffling the image channels, and so forth.
3468
3469 .. seealso::
3470
3471     :ocv:func:`perspectiveTransform`,
3472     :ocv:func:`getAffineTransform`,
3473     :ocv:func:`estimateRigidTransform`,
3474     :ocv:func:`warpAffine`,
3475     :ocv:func:`warpPerspective`
3476
3477
3478
3479 transpose
3480 ---------
3481 Transposes a matrix.
3482
3483 .. ocv:function:: void transpose(InputArray src, OutputArray dst)
3484
3485 .. ocv:pyfunction:: cv2.transpose(src[, dst]) -> dst
3486
3487 .. ocv:cfunction:: void cvTranspose(const CvArr* src, CvArr* dst)
3488 .. ocv:pyoldfunction:: cv.Transpose(src, dst)-> None
3489
3490     :param src: input array.
3491
3492     :param dst: output array of the same type as ``src``.
3493
3494 The function :ocv:func:`transpose` transposes the matrix ``src`` :
3495
3496 .. math::
3497
3498     \texttt{dst} (i,j) =  \texttt{src} (j,i)
3499
3500 .. note:: No complex conjugation is done in case of a complex matrix. It it should be done separately if needed.