operations_on_arrays.rst 142.0 KB
Newer Older
1 2 3 4 5
Operations on Arrays
====================

.. highlight:: cpp

6
abs
7
---
8
Calculates an absolute value of each matrix element.
9

10 11
.. ocv:function:: MatExpr abs( const Mat& m )
.. ocv:function:: MatExpr abs( const MatExpr& e )
12

13 14
    :param m: matrix.
    :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`
V
Vadim Pisarevsky 已提交
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 36 37 38 39 40
.. ocv:pyfunction:: cv2.absdiff(src1, src2[, dst]) -> dst

.. ocv:cfunction:: void cvAbsDiff(const CvArr* src1, const CvArr* src2, CvArr* dst)
.. ocv:cfunction:: void cvAbsDiffS(const CvArr* src, CvArr* dst, CvScalar value)
.. ocv:pyoldfunction:: cv.AbsDiff(src1, src2, dst)-> None
.. 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 47 48 49
    :param src: single input array.

    :param value: scalar value.

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 70 71 72 73
 *
    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``:

    .. math::

        \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`
V
Vadim Pisarevsky 已提交
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 90 91 92 93 94

.. ocv:pyfunction:: cv2.add(src1, src2[, dst[, mask[, dtype]]]) -> dst

.. ocv:cfunction:: void cvAdd(const CvArr* src1, const CvArr* src2, CvArr* dst, const CvArr* mask=NULL)
.. ocv:cfunction:: void cvAddS(const CvArr* src, CvScalar value, CvArr* dst, const CvArr* mask=NULL)
.. ocv:pyoldfunction:: cv.Add(src1, src2, dst, mask=None)-> None
.. 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 101 102 103
    :param src: single input array.

    :param value: scalar value.

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

R
Ryan Rawson 已提交
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:
V
Vadim Pisarevsky 已提交
114

115
    .. math::
V
Vadim Pisarevsky 已提交
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 123 124 125

    .. math::

        \texttt{dst}(I) =  \texttt{saturate} ( \texttt{src1}(I) +  \texttt{src2} ) \quad \texttt{if mask}(I) \ne0

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

V
Vadim Pisarevsky 已提交
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 138

    dst = src1 + src2;
    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 143
.. 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.

144
.. seealso::
145

146 147 148
    :ocv:func:`subtract`,
    :ocv:func:`addWeighted`,
    :ocv:func:`scaleAdd`,
149
    :ocv:func:`Mat::convertTo`,
150 151
    :ref:`MatrixExpressions`

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 161 162 163
.. ocv:pyfunction:: cv2.addWeighted(src1, alpha, src2, beta, gamma[, dst[, dtype]]) -> dst

.. ocv:cfunction:: void cvAddWeighted(const CvArr* src1, double alpha, const CvArr* src2, double beta, double gamma, CvArr* dst)
.. 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 182

.. math::

V
Vadim Pisarevsky 已提交
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 194
.. seealso::

195 196 197
    :ocv:func:`add`,
    :ocv:func:`subtract`,
    :ocv:func:`scaleAdd`,
198
    :ocv:func:`Mat::convertTo`,
199 200
    :ref:`MatrixExpressions`

201 202 203 204


bitwise_and
-----------
205 206
Calculates the per-element bit-wise conjunction of two arrays or an array and a scalar.

207
.. ocv:function:: void bitwise_and(InputArray src1, InputArray src2, OutputArray dst, InputArray mask=noArray())
208

209 210 211 212 213 214
.. ocv:pyfunction:: cv2.bitwise_and(src1, src2[, dst[, mask]]) -> dst

.. ocv:cfunction:: void cvAnd(const CvArr* src1, const CvArr* src2, CvArr* dst, const CvArr* mask=NULL)
.. ocv:cfunction:: void cvAndS(const CvArr* src, CvScalar value, CvArr* dst, const CvArr* mask=NULL)
.. ocv:pyoldfunction:: cv.And(src1, src2, dst, mask=None)-> None
.. 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 221 222 223
    :param src: single input array.

    :param value: scalar value.

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:
V
Vadim Pisarevsky 已提交
232

233
    .. math::
V
Vadim Pisarevsky 已提交
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()``:
V
Vadim Pisarevsky 已提交
239

240
    .. math::
V
Vadim Pisarevsky 已提交
241

242
        \texttt{dst} (I) =  \texttt{src1} (I)  \wedge \texttt{src2} \quad \texttt{if mask} (I) \ne0
V
Vadim Pisarevsky 已提交
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 248 249

    .. math::

        \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

V
Vadim Pisarevsky 已提交
255

256 257
bitwise_not
-----------
258 259
Inverts every bit of an array.

260
.. ocv:function:: void bitwise_not(InputArray src, OutputArray dst, InputArray mask=noArray())
261

262 263 264 265
.. ocv:pyfunction:: cv2.bitwise_not(src[, dst[, mask]]) -> dst

.. ocv:cfunction:: void cvNot(const CvArr* src, CvArr* dst)
.. 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 276

.. math::

V
Vadim Pisarevsky 已提交
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 284

bitwise_or
----------
285 286
Calculates the per-element bit-wise disjunction of two arrays or an array and a scalar.

287
.. ocv:function:: void bitwise_or(InputArray src1, InputArray src2, OutputArray dst, InputArray mask=noArray())
288

289 290 291 292 293 294
.. ocv:pyfunction:: cv2.bitwise_or(src1, src2[, dst[, mask]]) -> dst

.. ocv:cfunction:: void cvOr(const CvArr* src1, const CvArr* src2, CvArr* dst, const CvArr* mask=NULL)
.. ocv:cfunction:: void cvOrS(const CvArr* src, CvScalar value, CvArr* dst, const CvArr* mask=NULL)
.. ocv:pyoldfunction:: cv.Or(src1, src2, dst, mask=None)-> None
.. 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 301 302 303
    :param src: single input array.

    :param value: scalar value.

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:
V
Vadim Pisarevsky 已提交
312

313
        .. math::
V
Vadim Pisarevsky 已提交
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()``:
V
Vadim Pisarevsky 已提交
319

320
        .. math::
V
Vadim Pisarevsky 已提交
321

322
            \texttt{dst} (I) =  \texttt{src1} (I)  \vee \texttt{src2} \quad \texttt{if mask} (I) \ne0
V
Vadim Pisarevsky 已提交
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 330 331
            \texttt{dst} (I) =  \texttt{src1}  \vee \texttt{src2} (I) \quad \texttt{if mask} (I) \ne0


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 336
bitwise_xor
-----------
337 338
Calculates the per-element bit-wise "exclusive or" operation on two arrays or an array and a scalar.

339
.. ocv:function:: void bitwise_xor(InputArray src1, InputArray src2, OutputArray dst, InputArray mask=noArray())
340

341 342 343 344 345 346
.. ocv:pyfunction:: cv2.bitwise_xor(src1, src2[, dst[, mask]]) -> dst

.. ocv:cfunction:: void cvXor(const CvArr* src1, const CvArr* src2, CvArr* dst, const CvArr* mask=NULL)
.. ocv:cfunction:: void cvXorS(const CvArr* src, CvScalar value, CvArr* dst, const CvArr* mask=NULL)
.. ocv:pyoldfunction:: cv.Xor(src1, src2, dst, mask=None)-> None
.. 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 353 354 355
    :param src: single input array.

    :param value: scalar value.

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:
V
Vadim Pisarevsky 已提交
364

365
        .. math::
V
Vadim Pisarevsky 已提交
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()``:
V
Vadim Pisarevsky 已提交
371

372
        .. math::
V
Vadim Pisarevsky 已提交
373

374
            \texttt{dst} (I) =  \texttt{src1} (I)  \oplus \texttt{src2} \quad \texttt{if mask} (I) \ne0
V
Vadim Pisarevsky 已提交
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 380 381 382 383
        .. math::

            \texttt{dst} (I) =  \texttt{src1}  \oplus \texttt{src2} (I) \quad \texttt{if mask} (I) \ne0


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
V
Vadim Pisarevsky 已提交
388
---------------
389
Calculates the covariance matrix of a set of vectors.
V
Vadim Pisarevsky 已提交
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 396
.. ocv:pyfunction:: cv2.calcCovarMatrix(samples, flags[, covar[, mean[, ctype]]]) -> covar, mean

397 398
.. ocv:cfunction:: void cvCalcCovarMatrix( const CvArr** vects, int count, CvArr* cov_mat, CvArr* avg, int flags )

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 408
    :param ctype: type of the matrixl; it equals 'CV_64F' by default.

409
    :param mean: input or output (depending on the flags) array as the average value of the input vectors.
V
Vadim Pisarevsky 已提交
410

411 412
    :param vects: a set of vectors.

413
    :param flags: operation flags as a combination of the following values:
V
Vadim Pisarevsky 已提交
414 415

            * **CV_COVAR_SCRAMBLED** The output covariance matrix is calculated as:
416 417

                .. math::
V
Vadim Pisarevsky 已提交
418

V
Vadim Pisarevsky 已提交
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

V
Vadim Pisarevsky 已提交
423 424 425
            * **CV_COVAR_NORMAL** The output covariance matrix is calculated as:

                .. math::
426

V
Vadim Pisarevsky 已提交
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 442
.. seealso::

443 444 445
    :ocv:class:`PCA`,
    :ocv:func:`mulTransposed`,
    :ocv:func:`Mahalanobis`
446

V
Vadim Pisarevsky 已提交
447

448

449
cartToPolar
V
Vadim Pisarevsky 已提交
450
-----------
451
Calculates the magnitude and angle of 2D vectors.
V
Vadim Pisarevsky 已提交
452

453
.. ocv:function:: void cartToPolar(InputArray x, InputArray y, OutputArray magnitude, OutputArray angle, bool angleInDegrees=false)
454

455 456
.. ocv:pyfunction:: cv2.cartToPolar(x, y[, magnitude[, angle[, angleInDegrees]]]) -> magnitude, angle

457 458
.. ocv:cfunction:: void cvCartToPolar( const CvArr* x, const CvArr* y, CvArr* magnitude, CvArr* angle=NULL, int angle_in_degrees=0 )

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 472
    :param angle_in_degrees: a flag, indicating whether the angles are measured in radians, or in degrees (specific to C syntax).

473
The function ``cartToPolar`` calculates either the magnitude, angle, or both for every 2D vector (x(I),y(I)):
474 475 476

.. math::

V
Vadim Pisarevsky 已提交
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

A
Alexander Shishkov 已提交
481
.. seealso::
482

A
Alexander Shishkov 已提交
483 484
    :ocv:func:`Sobel`,
    :ocv:func:`Scharr`
485

486
checkRange
V
Vadim Pisarevsky 已提交
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.
V
Vadim Pisarevsky 已提交
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


V
Vadim Pisarevsky 已提交
511 512
compare
-------
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 522
.. ocv:pyoldfunction:: cv.Cmp(src1, src2, dst, cmpOp)-> None

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 532 533 534
    :param src: single input array.

    :param value: scalar value.

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:
V
Vadim Pisarevsky 已提交
538

539 540 541 542 543 544
            * **CMP_EQ** ``src1`` is equal to ``src2``.
            * **CMP_GT** ``src1`` is greater than ``src2``.
            * **CMP_GE** ``src1`` is greater than or equal to ``src2``.
            * **CMP_LT** ``src1`` is less than ``src2``.
            * **CMP_LE** ``src1`` is less than or equal to ``src2``.
            * **CMP_NE** ``src1`` is unequal to ``src2``.
545

546
The function compares:
V
Vadim Pisarevsky 已提交
547

548

549 550
 *
   Elements of two arrays when ``src1`` and ``src2`` have the same size:
551 552 553

   .. math::

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 560

   .. math::

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 567

   .. math::

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.
V
Vadim Pisarevsky 已提交
572
The comparison operations can be replaced with the equivalent matrix expressions: ::
573 574 575 576

    Mat dst1 = src1 >= src2;
    Mat dst2 = src1 < 8;
    ...
577

578

579 580
.. seealso::

581 582 583 584
    :ocv:func:`checkRange`,
    :ocv:func:`min`,
    :ocv:func:`max`,
    :ocv:func:`threshold`,
585 586
    :ref:`MatrixExpressions`

V
Vadim Pisarevsky 已提交
587

588

589
completeSymm
V
Vadim Pisarevsky 已提交
590
------------
591
Copies the lower or the upper half of a square matrix to another half.
V
Vadim Pisarevsky 已提交
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
 *
V
Vadim Pisarevsky 已提交
604
    :math:`\texttt{mtx}_{ij}=\texttt{mtx}_{ji}`     for
V
Vadim Pisarevsky 已提交
605
    :math:`i > j`     if ``lowerToUpper=false``
606

607
 *
V
Vadim Pisarevsky 已提交
608
    :math:`\texttt{mtx}_{ij}=\texttt{mtx}_{ji}`     for
V
Vadim Pisarevsky 已提交
609
    :math:`i < j`     if ``lowerToUpper=true``
610

611 612
.. seealso::

613 614
    :ocv:func:`flip`,
    :ocv:func:`transpose`
615

V
Vadim Pisarevsky 已提交
616

617

618
convertScaleAbs
V
Vadim Pisarevsky 已提交
619
---------------
620
Scales, calculates absolute values, and converts the result to 8-bit.
V
Vadim Pisarevsky 已提交
621

622
.. ocv:function:: void convertScaleAbs(InputArray src, OutputArray dst, double alpha=1, double beta=0)
623

624 625 626 627
.. ocv:pyfunction:: cv2.convertScaleAbs(src[, dst[, alpha[, beta]]]) -> dst

.. ocv:cfunction:: void cvConvertScaleAbs(const CvArr* src, CvArr* dst, double scale=1, double shift=0)
.. 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 641
.. math::

V
Vadim Pisarevsky 已提交
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 647 648 649 650 651

    Mat_<float> A(30,30);
    randu(A, Scalar(-100), Scalar(100));
    Mat_<float> B = A*5 + 3;
    B = abs(B);
    // Mat_<float> B = abs(A*5+3) will also do the job,
    // but it will allocate a temporary matrix
652

653

654 655
.. seealso::

656 657
    :ocv:func:`Mat::convertTo`,
    :ocv:func:`abs`
658

V
Vadim Pisarevsky 已提交
659

660

661
countNonZero
V
Vadim Pisarevsky 已提交
662
------------
663
Counts non-zero array elements.
664

665
.. ocv:function:: int countNonZero( InputArray src )
666

667 668 669
.. ocv:pyfunction:: cv2.countNonZero(src) -> retval

.. 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

V
Vadim Pisarevsky 已提交
677
.. math::
678

679
    \sum _{I: \; \texttt{src} (I) \ne0 } 1
680

681 682
.. seealso::

683 684 685 686 687
    :ocv:func:`mean`,
    :ocv:func:`meanStdDev`,
    :ocv:func:`norm`,
    :ocv:func:`minMaxLoc`,
    :ocv:func:`calcCovarMatrix`
688

V
Vadim Pisarevsky 已提交
689

690

691
cvarrToMat
V
Vadim Pisarevsky 已提交
692
----------
693
Converts ``CvMat``, ``IplImage`` , or ``CvMatND`` to ``Mat``.
V
Vadim Pisarevsky 已提交
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.
V
Vadim Pisarevsky 已提交
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` .
V
Vadim Pisarevsky 已提交
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.
V
Vadim Pisarevsky 已提交
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
V
Vadim Pisarevsky 已提交
713
``CvArr`` paradigm in the code that is migrated to use new-style data structures internally. The reverse transformation, from
714
``Mat`` to
V
Vadim Pisarevsky 已提交
715
``CvMat`` or
716
``IplImage`` can be done by a simple assignment: ::
V
Vadim Pisarevsky 已提交
717

718 719 720 721 722 723 724 725 726
    CvMat* A = cvCreateMat(10, 10, CV_32F);
    cvSetIdentity(A);
    IplImage A1; cvGetImage(A, &A1);
    Mat B = cvarrToMat(A);
    Mat B1 = cvarrToMat(&A1);
    IplImage C = B;
    CvMat C1 = B1;
    // now A, A1, B, B1, C and C1 are different headers
    // for the same 10x10 floating-point array.
727 728
    // note that you will need to use "&"
    // 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 (
V
Vadim Pisarevsky 已提交
732
``CvMat`` or
733 734
``IplImage`` ) to ``Mat`` . However, the function can also take
``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.
V
Vadim Pisarevsky 已提交
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 740
:ocv:class:`Mat` and
``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::
V
Vadim Pisarevsky 已提交
747

748 749
    :ocv:cfunc:`cvGetImage`,
    :ocv:cfunc:`cvGetMat`,
750 751
    :ocv:func:`extractImageCOI`,
    :ocv:func:`insertImageCOI`,
752
    :ocv:func:`mixChannels`
753

754
dct
755
---
756 757
Performs a forward or inverse discrete Cosine transform of 1D or 2D array.

758
.. ocv:function:: void dct(InputArray src, OutputArray dst, int flags=0)
759

760 761 762 763
.. ocv:pyfunction:: cv2.dct(src[, dst[, flags]]) -> dst

.. ocv:cfunction:: void cvDCT(const CvArr* src, CvArr* dst, int flags)
.. 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 802 803
    (since
    :math:`C^{(N)}` is an orthogonal matrix,
    :math:`C^{(N)} \cdot \left(C^{(N)}\right)^T = I` )
804

805 806
*
    Forward 2D Cosine transform of ``M x N`` matrix:
807

808 809 810
    .. math::

        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 821 822


The function chooses the mode of operation by looking at the flags and size of the input array:

*
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.
V
Vadim Pisarevsky 已提交
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 842
        size_t getOptimalDCTSize(size_t N) { return 2*getOptimalDFTSize((N+1)/2); }
        N1 = getOptimalDCTSize(N);
843

844
.. seealso:: :ocv:func:`dft` , :ocv:func:`getOptimalDFTSize` , :ocv:func:`idct`
845

V
Vadim Pisarevsky 已提交
846

847

848
dft
V
Vadim Pisarevsky 已提交
849
---
850
Performs a forward or inverse Discrete Fourier transform of a 1D or 2D floating-point array.
V
Vadim Pisarevsky 已提交
851

852
.. ocv:function:: void dft(InputArray src, OutputArray dst, int flags=0, int nonzeroRows=0)
853

854 855
.. ocv:pyfunction:: cv2.dft(src[, dst[, flags[, nonzeroRows]]]) -> dst

856 857
.. ocv:cfunction:: void cvDFT( const CvArr* src, CvArr* dst, int flags, int nonzero_rows=0 )

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 869
            * **DFT_SCALE** scales the result: divide it by the number of array elements. Normally, it is combined with  ``DFT_INVERSE``.
            * **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

R
Ryan Rawson 已提交
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 888 889
    where
    :math:`F^{(N)}_{jk}=\exp(-2\pi i j k/N)` and
    :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 899
    where
    :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 912 913 914 915

    .. math::

        \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}


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 919

.. math::

V
Vadim Pisarevsky 已提交
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:
V
Vadim Pisarevsky 已提交
929

930
    * When ``DFT_COMPLEX_OUTPUT`` is set, the output is a complex matrix of the same size as input.
V
Vadim Pisarevsky 已提交
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 947 948
    {
        // reallocate the output array if needed
        C.create(abs(A.rows - B.rows)+1, abs(A.cols - B.cols)+1, A.type());
        Size dftSize;
949
        // calculate the size of DFT transform
950 951
        dftSize.width = getOptimalDFTSize(A.cols + B.cols - 1);
        dftSize.height = getOptimalDFTSize(A.rows + B.rows - 1);
V
Vadim Pisarevsky 已提交
952

953 954 955
        // allocate temporary buffers and initialize them with 0's
        Mat tempA(dftSize, A.type(), Scalar::all(0));
        Mat tempB(dftSize, B.type(), Scalar::all(0));
V
Vadim Pisarevsky 已提交
956

957 958 959 960 961
        // copy A and B to the top-left corners of tempA and tempB, respectively
        Mat roiA(tempA, Rect(0,0,A.cols,A.rows));
        A.copyTo(roiA);
        Mat roiB(tempB, Rect(0,0,B.cols,B.rows));
        B.copyTo(roiB);
V
Vadim Pisarevsky 已提交
962

963 964 965 966
        // now transform the padded A & B in-place;
        // use "nonzeroRows" hint for faster processing
        dft(tempA, tempA, 0, A.rows);
        dft(tempB, tempB, 0, B.rows);
V
Vadim Pisarevsky 已提交
967

968 969 970
        // multiply the spectrums;
        // the function handles packed spectrum representations well
        mulSpectrums(tempA, tempB, tempA);
V
Vadim Pisarevsky 已提交
971

972 973
        // transform the product back from the frequency domain.
        // Even though all the result rows will be non-zero,
974
        // you need only the first C.rows of them, and thus you
975 976
        // pass nonzeroRows == C.rows
        dft(tempA, tempA, DFT_INVERSE + DFT_SCALE, C.rows);
V
Vadim Pisarevsky 已提交
977

978 979
        // now copy the result back to C.
        tempA(Rect(0, 0, C.cols, C.rows)).copyTo(C);
V
Vadim Pisarevsky 已提交
980

981 982
        // all the temporary buffers will be deallocated automatically
    }
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.
V
Vadim Pisarevsky 已提交
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

V
Vadim Pisarevsky 已提交
1000

1001

1002
divide
1003
------
1004 1005
Performs per-element division of two arrays or a scalar by an array.

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 1011 1012 1013
.. ocv:pyfunction:: cv2.divide(src1, src2[, dst[, scale[, dtype]]]) -> dst
.. ocv:pyfunction:: cv2.divide(scale, src2[, dst[, dtype]]) -> dst

.. 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

V
Vadim Pisarevsky 已提交
1026
The functions ``divide`` divide one array by another:
1027 1028 1029

.. math::

V
Vadim Pisarevsky 已提交
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 1035

.. math::

V
Vadim Pisarevsky 已提交
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 1041
.. 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.

1042 1043
.. seealso::

1044 1045 1046
    :ocv:func:`multiply`,
    :ocv:func:`add`,
    :ocv:func:`subtract`,
1047 1048
    :ref:`MatrixExpressions`

V
Vadim Pisarevsky 已提交
1049

1050

1051
determinant
V
Vadim Pisarevsky 已提交
1052
-----------
1053
Returns the determinant of a square floating-point matrix.
V
Vadim Pisarevsky 已提交
1054

1055
.. ocv:function:: double determinant(InputArray mtx)
1056

1057 1058
.. ocv:pyfunction:: cv2.determinant(mtx) -> retval

1059 1060
.. ocv:cfunction:: double cvDet( const CvArr* mat )

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 1071
.. seealso::

1072 1073 1074 1075
    :ocv:func:`trace`,
    :ocv:func:`invert`,
    :ocv:func:`solve`,
    :ocv:func:`eigen`,
1076 1077
    :ref:`MatrixExpressions`

V
Vadim Pisarevsky 已提交
1078

1079

1080
eigen
V
Vadim Pisarevsky 已提交
1081
-----
1082
Calculates eigenvalues and eigenvectors of a symmetric matrix.
V
Vadim Pisarevsky 已提交
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 1109
.. note:: in the new and the old interfaces different ordering of eigenvalues and eigenvectors parameters is used.

1110
.. seealso:: :ocv:func:`completeSymm` , :ocv:class:`PCA`
1111

V
Vadim Pisarevsky 已提交
1112

1113

1114
exp
V
Vadim Pisarevsky 已提交
1115
---
1116
Calculates the exponent of every array element.
1117

1118
.. ocv:function:: void exp(InputArray src, OutputArray dst)
1119

1120 1121 1122 1123
.. ocv:pyfunction:: cv2.exp(src[, dst]) -> dst

.. ocv:cfunction:: void cvExp(const CvArr* src, CvArr* dst)
.. 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``.
V
Vadim Pisarevsky 已提交
1128 1129

The function ``exp`` calculates the exponent of every element of the input array:
1130 1131 1132

.. math::

1133
    \texttt{dst} [I] = e^{ src(I) }
1134

1135 1136
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.

1137
.. seealso::  :ocv:func:`log` , :ocv:func:`cartToPolar` , :ocv:func:`polarToCart` , :ocv:func:`phase` , :ocv:func:`pow` , :ocv:func:`sqrt` , :ocv:func:`magnitude`
1138

V
Vadim Pisarevsky 已提交
1139

1140

1141
extractImageCOI
V
Vadim Pisarevsky 已提交
1142
---------------
1143
Extracts the selected image channel.
V
Vadim Pisarevsky 已提交
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

V
Vadim Pisarevsky 已提交
1155
To extract a channel from a new-style matrix, use
1156 1157
:ocv:func:`mixChannels` or
: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 1165
Copies the selected image channel from a new-style C++ matrix to the old-style C array.

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 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192

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.

The sample below illustrates how to use the function:
::

    Mat temp(240, 320, CV_8UC1, Scalar(255));
    IplImage* img = cvCreateImage(cvSize(320,240), IPL_DEPTH_8U, 3);
    insertImageCOI(temp, img, 1); //insert to the first channel
    cvNamedWindow("window",1);
    cvShowImage("window", img); //you should see green image, because channel number 1 is green (BGR)
    cvWaitKey(0);
    cvDestroyAllWindows();
    cvReleaseImage(&img);

To insert a channel to a new-style matrix, use
:ocv:func:`merge` .

.. seealso::  :ocv:func:`mixChannels` , :ocv:func:`split` , :ocv:func:`merge` , :ocv:func:`cvarrToMat` , :ocv:cfunc:`cvSetImageCOI` , :ocv:cfunc:`cvGetImageCOI`

1193

1194
flip
1195
----
1196 1197
Flips a 2D array around vertical, horizontal, or both axes.

1198
.. ocv:function:: void flip(InputArray src, OutputArray dst, int flipCode)
1199

1200 1201
.. ocv:pyfunction:: cv2.flip(src, flipCode[, dst]) -> dst

1202 1203
.. ocv:cfunction:: void cvFlip( const CvArr* src, CvArr* dst=NULL, int flip_mode=0 )

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

V
Vadim Pisarevsky 已提交
1212
The function ``flip`` flips the array in one of three different ways (row and column indices are 0-based):
1213 1214 1215

.. math::

1216 1217 1218 1219 1220 1221 1222 1223
    \texttt{dst} _{ij} =
    \left\{
    \begin{array}{l l}
    \texttt{src} _{\texttt{src.rows}-i-1,j} & if\;  \texttt{flipCode} = 0 \\
    \texttt{src} _{i, \texttt{src.cols} -j-1} & if\;  \texttt{flipCode} > 0 \\
    \texttt{src} _{ \texttt{src.rows} -i-1, \texttt{src.cols} -j-1} & if\; \texttt{flipCode} < 0 \\
    \end{array}
    \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 1238
    Reversing the order of point arrays (``flipCode > 0`` or ``flipCode == 0``).

1239
.. seealso:: :ocv:func:`transpose` , :ocv:func:`repeat` , :ocv:func:`completeSymm`
1240

V
Vadim Pisarevsky 已提交
1241

1242

1243
gemm
V
Vadim Pisarevsky 已提交
1244
----
1245
Performs generalized matrix multiplication.
V
Vadim Pisarevsky 已提交
1246

1247
.. ocv:function:: void gemm( InputArray src1, InputArray src2, double alpha, InputArray src3, double gamma, OutputArray dst, int flags=0 )
1248

1249 1250 1251
.. ocv:pyfunction:: cv2.gemm(src1, src2, alpha, src3, gamma[, dst[, flags]]) -> dst

.. 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 1269 1270
            * **GEMM_1_T** transposes ``src1``.
            * **GEMM_2_T** transposes ``src2``.
            * **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 1275

.. math::

V
Vadim Pisarevsky 已提交
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

V
Vadim Pisarevsky 已提交
1285

1286

1287
getConvertElem
V
Vadim Pisarevsky 已提交
1288
--------------
1289
Returns a conversion function for a single pixel.
V
Vadim Pisarevsky 已提交
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

V
Vadim Pisarevsky 已提交
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 1312 1313 1314 1315 1316
``ConvertData`` and ``ConvertScaleData`` are defined as: ::

    typedef void (*ConvertData)(const void* from, void* to, int cn)
    typedef void (*ConvertScaleData)(const void* from, void* to,
                                     int cn, double alpha, double beta)

1317
.. seealso:: :ocv:func:`Mat::convertTo` , :ocv:func:`SparseMat::convertTo`
1318

V
Vadim Pisarevsky 已提交
1319

1320

1321
getOptimalDFTSize
V
Vadim Pisarevsky 已提交
1322
-----------------
1323
Returns the optimal DFT size for a given vector size.
V
Vadim Pisarevsky 已提交
1324

1325
.. ocv:function:: int getOptimalDFTSize(int vecsize)
1326

1327 1328 1329 1330
.. ocv:pyfunction:: cv2.getOptimalDFTSize(vecsize) -> retval

.. ocv:cfunction:: int cvGetOptimalDFTSize(int size0)
.. 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

V
Vadim Pisarevsky 已提交
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

V
Vadim Pisarevsky 已提交
1345

1346

1347
idct
V
Vadim Pisarevsky 已提交
1348
----
1349
Calculates the inverse Discrete Cosine Transform of a 1D or 2D array.
V
Vadim Pisarevsky 已提交
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

V
Vadim Pisarevsky 已提交
1361
``idct(src, dst, flags)`` is equivalent to ``dct(src, dst, flags | DCT_INVERSE)``.
1362

1363 1364
.. seealso::

1365 1366 1367 1368
    :ocv:func:`dct`,
    :ocv:func:`dft`,
    :ocv:func:`idft`,
    :ocv:func:`getOptimalDFTSize`
1369

V
Vadim Pisarevsky 已提交
1370

1371

1372
idft
V
Vadim Pisarevsky 已提交
1373
----
1374
Calculates the inverse Discrete Fourier Transform of a 1D or 2D array.
V
Vadim Pisarevsky 已提交
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

A
Alexander Shishkov 已提交
1388
``idft(src, dst, flags)`` is equivalent to ``dft(src, dst, flags | DFT_INVERSE)`` .
V
Vadim Pisarevsky 已提交
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 1395

.. seealso::

1396 1397 1398 1399 1400
    :ocv:func:`dft`,
    :ocv:func:`dct`,
    :ocv:func:`idct`,
    :ocv:func:`mulSpectrums`,
    :ocv:func:`getOptimalDFTSize`
1401

V
Vadim Pisarevsky 已提交
1402

1403

1404
inRange
V
Vadim Pisarevsky 已提交
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 1411 1412 1413 1414 1415
.. ocv:pyfunction:: cv2.inRange(src, lowerb, upperb[, dst]) -> dst

.. ocv:cfunction:: void cvInRange(const CvArr* src, const CvArr* lower, const CvArr* upper, CvArr* dst)
.. ocv:cfunction:: void cvInRangeS(const CvArr* src, CvScalar lower, CvScalar upper, CvArr* dst)
.. ocv:pyoldfunction:: cv.InRange(src, lower, upper, dst)-> None
.. 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
V
Vadim Pisarevsky 已提交
1447
------
1448
Finds the inverse or pseudo-inverse of a matrix.
V
Vadim Pisarevsky 已提交
1449

1450
.. ocv:function:: double invert(InputArray src, OutputArray dst, int flags=DECOMP_LU)
1451

1452 1453
.. ocv:pyfunction:: cv2.invert(src[, dst[, flags]]) -> retval, dst

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 1480
.. seealso::

1481 1482
    :ocv:func:`solve`,
    :ocv:class:`SVD`
1483

V
Vadim Pisarevsky 已提交
1484

1485

1486
log
V
Vadim Pisarevsky 已提交
1487
---
1488
Calculates the natural logarithm of every array element.
1489

1490
.. ocv:function:: void log(InputArray src, OutputArray dst)
1491

1492 1493 1494 1495
.. ocv:pyfunction:: cv2.log(src[, dst]) -> dst

.. ocv:cfunction:: void cvLog(const CvArr* src, CvArr* dst)
.. 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

V
Vadim Pisarevsky 已提交
1501
The function ``log`` calculates the natural logarithm of the absolute value of every element of the input array:
1502 1503 1504

.. math::

V
Vadim Pisarevsky 已提交
1505 1506
    \texttt{dst} (I) =  \fork{\log |\texttt{src}(I)|}{if $\texttt{src}(I) \ne 0$ }{\texttt{C}}{otherwise}

1507
where ``C`` is a large negative number (about -700 in the current implementation).
1508 1509 1510 1511
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.

.. seealso::

1512 1513 1514 1515 1516 1517 1518
    :ocv:func:`exp`,
    :ocv:func:`cartToPolar`,
    :ocv:func:`polarToCart`,
    :ocv:func:`phase`,
    :ocv:func:`pow`,
    :ocv:func:`sqrt`,
    :ocv:func:`magnitude`
1519 1520


1521

1522
LUT
V
Vadim Pisarevsky 已提交
1523
---
1524
Performs a look-up table transform of an array.
V
Vadim Pisarevsky 已提交
1525

1526
.. ocv:function:: void LUT( InputArray src, InputArray lut, OutputArray dst, int interpolation=0 )
1527

1528 1529 1530 1531
.. ocv:pyfunction:: cv2.LUT(src, lut[, dst[, interpolation]]) -> dst

.. ocv:cfunction:: void cvLUT(const CvArr* src, CvArr* dst, const CvArr* lut)
.. 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 1542

.. math::

V
Vadim Pisarevsky 已提交
1543
    \texttt{dst} (I)  \leftarrow \texttt{lut(src(I) + d)}
1544 1545 1546 1547 1548

where

.. math::

V
Vadim Pisarevsky 已提交
1549
    d =  \fork{0}{if \texttt{src} has depth \texttt{CV\_8U}}{128}{if \texttt{src} has depth \texttt{CV\_8S}}
1550

1551 1552
.. seealso::

1553 1554
    :ocv:func:`convertScaleAbs`,
    :ocv:func:`Mat::convertTo`
1555

V
Vadim Pisarevsky 已提交
1556

1557

1558
magnitude
V
Vadim Pisarevsky 已提交
1559
---------
1560
Calculates the magnitude of 2D vectors.
V
Vadim Pisarevsky 已提交
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 1575

.. math::

V
Vadim Pisarevsky 已提交
1576
    \texttt{dst} (I) =  \sqrt{\texttt{x}(I)^2 + \texttt{y}(I)^2}
1577

1578 1579
.. seealso::

1580 1581 1582 1583
    :ocv:func:`cartToPolar`,
    :ocv:func:`polarToCart`,
    :ocv:func:`phase`,
    :ocv:func:`sqrt`
1584

V
Vadim Pisarevsky 已提交
1585

1586

1587
Mahalanobis
V
Vadim Pisarevsky 已提交
1588
-----------
1589
Calculates the Mahalanobis distance between two vectors.
V
Vadim Pisarevsky 已提交
1590

1591
.. ocv:function:: double Mahalanobis( InputArray v1, InputArray v2, InputArray icovar )
1592

1593 1594
.. ocv:pyfunction:: cv2.Mahalanobis(v1, v2, icovar) -> retval

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 1608

.. math::

V
Vadim Pisarevsky 已提交
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

V
Vadim Pisarevsky 已提交
1611
The covariance matrix may be calculated using the
1612 1613
:ocv:func:`calcCovarMatrix` function and then inverted using the
:ocv:func:`invert` function (preferably using the ``DECOMP_SVD`` method, as the most accurate).
1614

1615

1616

1617
max
V
Vadim Pisarevsky 已提交
1618
---
1619
Calculates per-element maximum of two arrays or an array and a scalar.
V
Vadim Pisarevsky 已提交
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 1634 1635 1636 1637 1638
.. ocv:pyfunction:: cv2.max(src1, src2[, dst]) -> dst

.. ocv:cfunction:: void cvMax(const CvArr* src1, const CvArr* src2, CvArr* dst)
.. ocv:cfunction:: void cvMaxS(const CvArr* src, double value, CvArr* dst)
.. ocv:pyoldfunction:: cv.Max(src1, src2, dst)-> None
.. 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 1651

.. math::

V
Vadim Pisarevsky 已提交
1652
    \texttt{dst} (I)= \max ( \texttt{src1} (I), \texttt{src2} (I))
1653 1654 1655 1656 1657

or array and a scalar:

.. math::

V
Vadim Pisarevsky 已提交
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

V
Vadim Pisarevsky 已提交
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 1666
.. seealso::

1667 1668 1669 1670
    :ocv:func:`min`,
    :ocv:func:`compare`,
    :ocv:func:`inRange`,
    :ocv:func:`minMaxLoc`,
1671
    :ref:`MatrixExpressions`
V
Vadim Pisarevsky 已提交
1672

1673

1674
mean
V
Vadim Pisarevsky 已提交
1675
----
1676 1677 1678
Calculates an average (mean) of array elements.

.. ocv:function:: Scalar mean(InputArray src, InputArray mask=noArray())
1679

1680
.. ocv:pyfunction:: cv2.mean(src[, mask]) -> retval
1681

1682 1683
.. ocv:cfunction:: CvScalar cvAvg( const CvArr* arr, const CvArr* mask=NULL )

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 1693

.. math::

V
Vadim Pisarevsky 已提交
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

V
Vadim Pisarevsky 已提交
1696
When all the mask elements are 0's, the functions return ``Scalar::all(0)`` .
1697

1698 1699
.. seealso::

1700 1701 1702 1703
    :ocv:func:`countNonZero`,
    :ocv:func:`meanStdDev`,
    :ocv:func:`norm`,
    :ocv:func:`minMaxLoc`
1704

V
Vadim Pisarevsky 已提交
1705

1706

1707
meanStdDev
V
Vadim Pisarevsky 已提交
1708
----------
1709
Calculates a mean and standard deviation of array elements.
V
Vadim Pisarevsky 已提交
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 1716
.. ocv:cfunction:: void cvAvgSdv( const CvArr* arr, CvScalar* mean, CvScalar* std_dev, const CvArr* mask=NULL )

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 1730

.. math::

A
Alexander Shishkov 已提交
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

V
Vadim Pisarevsky 已提交
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 1738

.. seealso::

1739 1740 1741 1742 1743
    :ocv:func:`countNonZero`,
    :ocv:func:`mean`,
    :ocv:func:`norm`,
    :ocv:func:`minMaxLoc`,
    :ocv:func:`calcCovarMatrix`
1744

V
Vadim Pisarevsky 已提交
1745

1746

1747
merge
V
Vadim Pisarevsky 已提交
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 1756 1757 1758
.. ocv:pyfunction:: cv2.merge(mv[, dst]) -> dst

.. ocv:cfunction:: void cvMerge(const CvArr* src0, const CvArr* src1, const CvArr* src2, const CvArr* src3, CvArr* dst)
.. 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

V
Vadim Pisarevsky 已提交
1768
The function
1769 1770
:ocv:func:`split` does the reverse operation. If you need to shuffle channels in some other advanced way, use
:ocv:func:`mixChannels` .
1771

1772 1773
.. seealso::

1774 1775
    :ocv:func:`mixChannels`,
    :ocv:func:`split`,
1776
    :ocv:func:`Mat::reshape`
1777

V
Vadim Pisarevsky 已提交
1778

1779

1780
min
V
Vadim Pisarevsky 已提交
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)
V
Vadim Pisarevsky 已提交
1793

1794
.. ocv:function:: void min( const Mat& src1, double src2, Mat& dst )
1795

1796 1797 1798 1799 1800 1801
.. ocv:pyfunction:: cv2.min(src1, src2[, dst]) -> dst

.. ocv:cfunction:: void cvMin(const CvArr* src1, const CvArr* src2, CvArr* dst)
.. ocv:cfunction:: void cvMinS(const CvArr* src, double value, CvArr* dst)
.. ocv:pyoldfunction:: cv.Min(src1, src2, dst)-> None
.. 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 1814

.. math::

V
Vadim Pisarevsky 已提交
1815
    \texttt{dst} (I)= \min ( \texttt{src1} (I), \texttt{src2} (I))
1816 1817 1818 1819 1820

or array and a scalar:

.. math::

V
Vadim Pisarevsky 已提交
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 1826
The first three variants of the function listed above are actually a part of
: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 1829
.. seealso::

1830 1831 1832 1833
    :ocv:func:`max`,
    :ocv:func:`compare`,
    :ocv:func:`inRange`,
    :ocv:func:`minMaxLoc`,
1834 1835
    :ref:`MatrixExpressions`

V
Vadim Pisarevsky 已提交
1836

V
Vadim Pisarevsky 已提交
1837 1838 1839 1840 1841 1842
minMaxIdx
---------
Finds the global minimum and maximum in an array

.. ocv:function:: void minMaxIdx(InputArray src, double* minVal, double* maxVal, int* minIdx=0, int* maxIdx=0, InputArray mask=noArray())

1843
    :param src: input single-channel array.
V
Vadim Pisarevsky 已提交
1844

1845
    :param minVal: pointer to the returned minimum value; ``NULL`` is used if not required.
V
Vadim Pisarevsky 已提交
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

V
Vadim Pisarevsky 已提交
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)``).
V
Vadim Pisarevsky 已提交
1854

1855
    :param maxIdx: pointer to the returned maximum location (in nD case). ``NULL`` is used if not required.
1856

V
Vadim Pisarevsky 已提交
1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867
    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.

    The function does not work with multi-channel arrays. If you need to find minimum or maximum elements across all the channels, use
    :ocv:func:`Mat::reshape` first to reinterpret the array as single-channel. Or you may extract the particular channel using either
    :ocv:func:`extractImageCOI` , or
    :ocv:func:`mixChannels` , or
    :ocv:func:`split` .

    In case of a sparse matrix, the minimum is found among non-zero elements only.


1868

1869
minMaxLoc
V
Vadim Pisarevsky 已提交
1870
---------
V
Vadim Pisarevsky 已提交
1871
Finds the global minimum and maximum in an array.
V
Vadim Pisarevsky 已提交
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 1878
.. ocv:pyfunction:: cv2.minMaxLoc(src[, mask]) -> minVal, maxVal, minLoc, maxLoc

1879 1880
.. 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 )

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,
V
Vadim Pisarevsky 已提交
1896
if ``mask`` is not an empty array, in the specified array region.
1897

V
Vadim Pisarevsky 已提交
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 1901 1902
:ocv:func:`extractImageCOI` , or
:ocv:func:`mixChannels` , or
:ocv:func:`split` .
1903

1904 1905
.. seealso::

1906 1907 1908 1909 1910 1911 1912
    :ocv:func:`max`,
    :ocv:func:`min`,
    :ocv:func:`compare`,
    :ocv:func:`inRange`,
    :ocv:func:`extractImageCOI`,
    :ocv:func:`mixChannels`,
    :ocv:func:`split`,
1913
    :ocv:func:`Mat::reshape`
1914

1915 1916


1917
mixChannels
V
Vadim Pisarevsky 已提交
1918
-----------
1919
Copies specified channels from input arrays to the specified channels of output arrays.
V
Vadim Pisarevsky 已提交
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 1926
.. ocv:pyfunction:: cv2.mixChannels(src, dst, fromTo) -> None

1927 1928
.. ocv:cfunction:: void cvMixChannels( const CvArr** src, int src_count, CvArr** dst, int dst_count, const int* from_to, int pair_count )

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.
V
Vadim Pisarevsky 已提交
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

V
Vadim Pisarevsky 已提交
1943
The functions ``mixChannels`` provide an advanced mechanism for shuffling image channels.
1944

1945 1946 1947
:ocv:func:`split` and
:ocv:func:`merge` and some forms of
: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 1952 1953

    Mat rgba( 100, 100, CV_8UC4, Scalar(1,2,3,4) );
    Mat bgr( rgba.rows, rgba.cols, CV_8UC3 );
    Mat alpha( rgba.rows, rgba.cols, CV_8UC1 );
V
Vadim Pisarevsky 已提交
1954

1955
    // forming an array of matrices is a quite efficient operation,
1956 1957 1958 1959
    // because the matrix data is not copied, only the headers
    Mat out[] = { bgr, alpha };
    // rgba[0] -> bgr[2], rgba[1] -> bgr[1],
    // rgba[2] -> bgr[0], rgba[3] -> alpha[0]
V
Vadim Pisarevsky 已提交
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 1969 1970
    :ocv:func:`split`,
    :ocv:func:`merge`,
    :ocv:func:`cvtColor`
1971

V
Vadim Pisarevsky 已提交
1972

1973

1974
mulSpectrums
V
Vadim Pisarevsky 已提交
1975
------------
1976
Performs the per-element multiplication of two Fourier spectrums.
V
Vadim Pisarevsky 已提交
1977

1978
.. ocv:function:: void mulSpectrums( InputArray a, InputArray b, OutputArray c, int flags, bool conjB=false )
1979

1980 1981 1982 1983
.. ocv:pyfunction:: cv2.mulSpectrums(a, b, flags[, c[, conjB]]) -> c

.. ocv:cfunction:: void cvMulSpectrums( const CvArr* src1, const CvArr* src2, CvArr* dst, int flags)
.. 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

V
Vadim Pisarevsky 已提交
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
V
Vadim Pisarevsky 已提交
2005
--------
2006
Calculates the per-element scaled product of two arrays.
V
Vadim Pisarevsky 已提交
2007

2008
.. ocv:function:: void multiply( InputArray src1, InputArray src2, OutputArray dst, double scale=1, int dtype=-1 )
2009

2010 2011 2012
.. ocv:pyfunction:: cv2.multiply(src1, src2[, dst[, scale[, dtype]]]) -> dst

.. 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

V
Vadim Pisarevsky 已提交
2023
The function ``multiply`` calculates the per-element product of two arrays:
2024

V
Vadim Pisarevsky 已提交
2025
.. math::
2026

V
Vadim Pisarevsky 已提交
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 2037
.. 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.

2038 2039
.. seealso::

2040
    :ocv:func:`add`,
2041
    :ocv:func:`subtract`,
2042
    :ocv:func:`divide`,
2043
    :ref:`MatrixExpressions`,
2044 2045 2046 2047 2048 2049
    :ocv:func:`scaleAdd`,
    :ocv:func:`addWeighted`,
    :ocv:func:`accumulate`,
    :ocv:func:`accumulateProduct`,
    :ocv:func:`accumulateSquare`,
    :ocv:func:`Mat::convertTo`
2050

V
Vadim Pisarevsky 已提交
2051

2052

2053
mulTransposed
V
Vadim Pisarevsky 已提交
2054
-------------
2055
Calculates the product of a matrix and its transposition.
V
Vadim Pisarevsky 已提交
2056

2057
.. ocv:function:: void mulTransposed( InputArray src, OutputArray dst, bool aTa, InputArray delta=noArray(), double scale=1, int dtype=-1 )
2058

2059 2060
.. ocv:pyfunction:: cv2.mulTransposed(src, aTa[, dst[, delta[, scale[, dtype]]]]) -> dst

2061 2062
.. ocv:cfunction:: void cvMulTransposed( const CvArr* src, CvArr* dst, int order, const CvArr* delta=NULL, double scale=1. )

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

V
Vadim Pisarevsky 已提交
2077
The function ``mulTransposed`` calculates the product of ``src`` and its transposition:
2078 2079 2080

.. math::

V
Vadim Pisarevsky 已提交
2081
    \texttt{dst} = \texttt{scale} ( \texttt{src} - \texttt{delta} )^T ( \texttt{src} - \texttt{delta} )
2082

V
Vadim Pisarevsky 已提交
2083
if ``aTa=true`` , and
2084 2085 2086

.. math::

V
Vadim Pisarevsky 已提交
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 2092

.. seealso::

2093 2094 2095 2096
    :ocv:func:`calcCovarMatrix`,
    :ocv:func:`gemm`,
    :ocv:func:`repeat`,
    :ocv:func:`reduce`
2097

V
Vadim Pisarevsky 已提交
2098

2099

2100
norm
V
Vadim Pisarevsky 已提交
2101
----
2102
Calculates an absolute array norm, an absolute difference norm, or a relative difference norm.
V
Vadim Pisarevsky 已提交
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 2111 2112
.. ocv:pyfunction:: cv2.norm(src1[, normType[, mask]]) -> retval
.. ocv:pyfunction:: cv2.norm(src1, src2[, normType[, mask]]) -> retval

2113 2114
.. ocv:cfunction:: double cvNorm( const CvArr* arr1, const CvArr* arr2=NULL, int norm_type=CV_L2, const CvArr* mask=NULL )

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 2128 2129 2130

.. math::

    norm =  \forkthree{\|\texttt{src1}\|_{L_{\infty}} =  \max _I | \texttt{src1} (I)|}{if  $\texttt{normType} = \texttt{NORM\_INF}$ }
    { \| \texttt{src1} \| _{L_1} =  \sum _I | \texttt{src1} (I)|}{if  $\texttt{normType} = \texttt{NORM\_L1}$ }
V
Vadim Pisarevsky 已提交
2131
    { \| \texttt{src1} \| _{L_2} =  \sqrt{\sum_I \texttt{src1}(I)^2} }{if  $\texttt{normType} = \texttt{NORM\_L2}$ }
2132

V
Vadim Pisarevsky 已提交
2133
or an absolute or relative difference norm if ``src2`` is there:
2134 2135 2136 2137 2138

.. math::

    norm =  \forkthree{\|\texttt{src1}-\texttt{src2}\|_{L_{\infty}} =  \max _I | \texttt{src1} (I) -  \texttt{src2} (I)|}{if  $\texttt{normType} = \texttt{NORM\_INF}$ }
    { \| \texttt{src1} - \texttt{src2} \| _{L_1} =  \sum _I | \texttt{src1} (I) -  \texttt{src2} (I)|}{if  $\texttt{normType} = \texttt{NORM\_L1}$ }
V
Vadim Pisarevsky 已提交
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 2142 2143 2144 2145 2146

or

.. math::

    norm =  \forkthree{\frac{\|\texttt{src1}-\texttt{src2}\|_{L_{\infty}}    }{\|\texttt{src2}\|_{L_{\infty}} }}{if  $\texttt{normType} = \texttt{NORM\_RELATIVE\_INF}$ }
    { \frac{\|\texttt{src1}-\texttt{src2}\|_{L_1} }{\|\texttt{src2}\|_{L_1}} }{if  $\texttt{normType} = \texttt{NORM\_RELATIVE\_L1}$ }
V
Vadim Pisarevsky 已提交
2147
    { \frac{\|\texttt{src1}-\texttt{src2}\|_{L_2} }{\|\texttt{src2}\|_{L_2}} }{if  $\texttt{normType} = \texttt{NORM\_RELATIVE\_L2}$ }
2148

V
Vadim Pisarevsky 已提交
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
V
Vadim Pisarevsky 已提交
2158
---------
2159
Normalizes the norm or value range of an array.
V
Vadim Pisarevsky 已提交
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 2197
:ocv:func:`norm` and
: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 2202
.. seealso::

2203 2204 2205
    :ocv:func:`norm`,
    :ocv:func:`Mat::convertTo`,
    :ocv:func:`SparseMat::convertTo`
2206

2207 2208 2209 2210


PCA
---
2211
.. ocv:class:: PCA
2212

2213 2214
Principal Component Analysis class.

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 2221
    PCA compressPCA(InputArray pcaset, int maxComponents,
                    const Mat& testset, OutputArray compressed)
2222 2223
    {
        PCA pca(pcaset, // pass the data
2224
                Mat(), // there is no pre-computed mean vector,
2225 2226 2227 2228 2229
                       // so let the PCA engine to compute it
                CV_PCA_DATA_AS_ROW, // indicate that the vectors
                                    // are stored as matrix rows
                                    // (use CV_PCA_DATA_AS_COL if the vectors are
                                    // the matrix columns)
2230
                maxComponents // specify how many principal components to retain
2231 2232 2233 2234 2235
                );
        // if there is no test data, just return the computed basis, ready-to-use
        if( !testset.data )
            return pca;
        CV_Assert( testset.cols == pcaset.cols );
V
Vadim Pisarevsky 已提交
2236

2237
        compressed.create(testset.rows, maxComponents, testset.type());
V
Vadim Pisarevsky 已提交
2238

2239 2240 2241 2242 2243 2244 2245 2246 2247 2248
        Mat reconstructed;
        for( int i = 0; i < testset.rows; i++ )
        {
            Mat vec = testset.row(i), coeffs = compressed.row(i);
            // compress the vector, the result will be stored
            // in the i-th row of the output matrix
            pca.project(vec, coeffs);
            // and then reconstruct it
            pca.backProject(coeffs, reconstructed);
            // and measure the error
A
Alexander Shishkov 已提交
2249
            printf("%d. diff = %g\n", i, norm(vec, reconstructed, NORM_L2));
2250 2251 2252
        }
        return pca;
    }
2253

2254

2255 2256
.. seealso::

2257 2258 2259 2260 2261
    :ocv:func:`calcCovarMatrix`,
    :ocv:func:`mulTransposed`,
    :ocv:class:`SVD`,
    :ocv:func:`dft`,
    :ocv:func:`dct`
2262

V
Vadim Pisarevsky 已提交
2263

2264

2265
PCA::PCA
2266
--------
2267 2268
PCA constructors

2269
.. ocv:function:: PCA::PCA()
2270

2271
.. ocv:function:: PCA::PCA(InputArray data, InputArray mean, int flags, int maxComponents=0)
2272

2273 2274
.. ocv:function:: PCA::PCA(InputArray data, InputArray mean, int flags, double retainedVariance)

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 ()
V
Vadim Pisarevsky 已提交
2295
----------------
2296
Performs Principal Component Analysis of the supplied dataset.
V
Vadim Pisarevsky 已提交
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 2305
.. ocv:pyfunction:: cv2.PCAComputeVar(data, retainedVariance[, mean[, eigenvectors]]) -> mean, eigenvectors

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.
V
Vadim Pisarevsky 已提交
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
V
Vadim Pisarevsky 已提交
2327
------------
2328
Projects vector(s) to the principal component subspace.
V
Vadim Pisarevsky 已提交
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
V
Vadim Pisarevsky 已提交
2345
----------------
2346
Reconstructs vectors from their PC projections.
2347

2348
.. ocv:function:: Mat PCA::backProject(InputArray vec) const
V
Vadim Pisarevsky 已提交
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

V
Vadim Pisarevsky 已提交
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
V
Vadim Pisarevsky 已提交
2364
--------------------
2365 2366
Performs the perspective matrix transformation of vectors.

2367
.. ocv:function:: void perspectiveTransform( InputArray src, OutputArray dst, InputArray m )
2368

2369 2370 2371 2372
.. ocv:pyfunction:: cv2.perspectiveTransform(src, m[, dst]) -> dst

.. ocv:cfunction:: void cvPerspectiveTransform(const CvArr* src, CvArr* dst, const CvMat* mat)
.. 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 2383

.. math::

V
Vadim Pisarevsky 已提交
2384
    (x, y, z)  \rightarrow (x'/w, y'/w, z'/w)
2385 2386 2387 2388 2389

where

.. math::

V
Vadim Pisarevsky 已提交
2390
    (x', y', z', w') =  \texttt{mat} \cdot \begin{bmatrix} x & y & z & 1  \end{bmatrix}
2391 2392 2393 2394 2395

and

.. math::

V
Vadim Pisarevsky 已提交
2396
    w =  \fork{w'}{if $w' \ne 0$}{\infty}{otherwise}
2397

2398 2399
Here a 3D vector transformation is shown. In case of a 2D vector transformation, the ``z`` component is omitted.

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 2405 2406 2407
    :ocv:func:`transform`,
    :ocv:func:`warpPerspective`,
    :ocv:func:`getPerspectiveTransform`,
    :ocv:func:`findHomography`
2408

V
Vadim Pisarevsky 已提交
2409

2410

2411
phase
V
Vadim Pisarevsky 已提交
2412
-----
2413
Calculates the rotation angle of 2D vectors.
V
Vadim Pisarevsky 已提交
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 2430

.. math::

V
Vadim Pisarevsky 已提交
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
V
Vadim Pisarevsky 已提交
2437
-----------
2438
Calculates x and y coordinates of 2D vectors from their magnitude and angle.
V
Vadim Pisarevsky 已提交
2439

2440
.. ocv:function:: void polarToCart(InputArray magnitude, InputArray angle, OutputArray x, OutputArray y, bool angleInDegrees=false)
2441

2442 2443
.. ocv:pyfunction:: cv2.polarToCart(magnitude, angle[, x[, y[, angleInDegrees]]]) -> x, y

2444 2445
.. ocv:cfunction:: void cvPolarToCart( const CvArr* magnitude, const CvArr* angle, CvArr* x, CvArr* y, int angle_in_degrees=0 )

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 2461

.. math::

V
Vadim Pisarevsky 已提交
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 2465 2466 2467
The relative accuracy of the estimated coordinates is about ``1e-6``.

.. seealso::

2468 2469 2470 2471 2472 2473 2474
    :ocv:func:`cartToPolar`,
    :ocv:func:`magnitude`,
    :ocv:func:`phase`,
    :ocv:func:`exp`,
    :ocv:func:`log`,
    :ocv:func:`pow`,
    :ocv:func:`sqrt`
2475

V
Vadim Pisarevsky 已提交
2476

2477

2478
pow
V
Vadim Pisarevsky 已提交
2479
---
2480
Raises every array element to a power.
V
Vadim Pisarevsky 已提交
2481

2482
.. ocv:function:: void pow( InputArray src, double power, OutputArray dst )
2483

2484 2485 2486 2487
.. ocv:pyfunction:: cv2.pow(src, power[, dst]) -> dst

.. ocv:cfunction:: void cvPow( const CvArr* src, CvArr* dst, double power)
.. 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``.
V
Vadim Pisarevsky 已提交
2494

2495
The function ``pow`` raises every element of the input array to ``power`` :
2496 2497 2498

.. math::

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 2504 2505

    Mat mask = src < 0;
    pow(src, 1./5, dst);
    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 2511
Special values (NaN, Inf) are not handled.

2512 2513
.. seealso::

2514 2515 2516 2517 2518
    :ocv:func:`sqrt`,
    :ocv:func:`exp`,
    :ocv:func:`log`,
    :ocv:func:`cartToPolar`,
    :ocv:func:`polarToCart`
2519

V
Vadim Pisarevsky 已提交
2520 2521 2522


RNG
V
Vadim Pisarevsky 已提交
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
V
Vadim Pisarevsky 已提交
2531
), introduced by G. Marsaglia and W. W. Tsang.
2532

2533

2534

2535
RNG::RNG
2536
--------
2537 2538
The constructors

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
V
Vadim Pisarevsky 已提交
2560
---------------
2561
Returns the next random number of the specified type.
V
Vadim Pisarevsky 已提交
2562

2563
.. ocv:function:: RNG::operator uchar()
V
Vadim Pisarevsky 已提交
2564

2565
.. ocv:function:: RNG::operator schar()
V
Vadim Pisarevsky 已提交
2566

2567
.. ocv:function:: RNG::operator ushort()
V
Vadim Pisarevsky 已提交
2568

2569
.. ocv:function:: RNG::operator short()
V
Vadim Pisarevsky 已提交
2570

2571
.. ocv:function:: RNG::operator int()
V
Vadim Pisarevsky 已提交
2572

2573
.. ocv:function:: RNG::operator unsigned()
2574

2575
.. ocv:function:: RNG::operator float()
V
Vadim Pisarevsky 已提交
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 2586
Returns the next random number.

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 2601
Returns the next random number sampled from the uniform distribution.

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;
V
Vadim Pisarevsky 已提交
2615

2616
    // always produces 0
2617
    double a = rng.uniform(0, 1);
V
Vadim Pisarevsky 已提交
2618

2619
    // produces double from [0, 1)
2620
    double a1 = rng.uniform((double)0, (double)1);
V
Vadim Pisarevsky 已提交
2621

2622
    // produces float from [0, 1)
2623
    double b = rng.uniform(0.f, 1.f);
V
Vadim Pisarevsky 已提交
2624

2625
    // produces double from [0, 1)
2626
    double c = rng.uniform(0., 1.);
V
Vadim Pisarevsky 已提交
2627

2628
    // may cause compiler error because of ambiguity:
2629 2630
    //  RNG::uniform(0, (int)0.999999)? or RNG::uniform((double)0, 0.99999)?
    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
V
Vadim Pisarevsky 已提交
2668
-----
2669
Generates a single uniformly-distributed random number or an array of random numbers.
V
Vadim Pisarevsky 已提交
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 2689

.. math::

2690
    \texttt{low} _c  \leq \texttt{dst} (I)_c <  \texttt{high} _c
2691

2692 2693
.. seealso::

2694 2695
    :ocv:class:`RNG`,
    :ocv:func:`randn`,
2696
    :ocv:func:`theRNG`
2697

2698 2699


2700
randn
V
Vadim Pisarevsky 已提交
2701
-----
2702
Fills the array with normally distributed random numbers.
V
Vadim Pisarevsky 已提交
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 2717
.. seealso::

2718 2719
    :ocv:class:`RNG`,
    :ocv:func:`randu`
2720

V
Vadim Pisarevsky 已提交
2721

2722

2723
randShuffle
V
Vadim Pisarevsky 已提交
2724
-----------
2725
Shuffles the array elements randomly.
V
Vadim Pisarevsky 已提交
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 2740
.. seealso::

2741 2742
    :ocv:class:`RNG`,
    :ocv:func:`sort`
2743

V
Vadim Pisarevsky 已提交
2744

2745

2746
reduce
V
Vadim Pisarevsky 已提交
2747
------
2748
Reduces a matrix to a vector.
V
Vadim Pisarevsky 已提交
2749

2750
.. ocv:function:: void reduce( InputArray src, OutputArray dst, int dim, int rtype, int dtype=-1 )
2751

2752 2753 2754 2755
.. ocv:pyfunction:: cv2.reduce(src, dim, rtype[, dst[, dtype]]) -> dst

.. ocv:cfunction:: void cvReduce(const CvArr* src, CvArr* dst, int dim=-1, int op=CV_REDUCE_SUM)
.. 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

V
Vadim Pisarevsky 已提交
2779

2780

2781
repeat
V
Vadim Pisarevsky 已提交
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)
V
Vadim Pisarevsky 已提交
2786

2787
.. ocv:function:: Mat repeat( const Mat& src, int ny, int nx )
2788

2789 2790 2791
.. ocv:pyfunction:: cv2.repeat(src, ny, nx[, dst]) -> dst

.. 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

V
Vadim Pisarevsky 已提交
2803
The functions
2804
:ocv:func:`repeat` duplicate the input array one or more times along each of the two axes:
2805 2806 2807

.. math::

2808
    \texttt{dst} _{ij}= \texttt{src} _{i\mod src.rows, \; j\mod src.cols }
2809

V
Vadim Pisarevsky 已提交
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

V
Vadim Pisarevsky 已提交
2818

2819

2820
scaleAdd
V
Vadim Pisarevsky 已提交
2821
--------
2822
Calculates the sum of a scaled array and another array.
V
Vadim Pisarevsky 已提交
2823

2824
.. ocv:function:: void scaleAdd( InputArray src1, double alpha, InputArray src2, OutputArray dst )
2825

2826 2827 2828 2829
.. ocv:pyfunction:: cv2.scaleAdd(src1, alpha, src2[, dst]) -> dst

.. ocv:cfunction:: void cvScaleAdd(const CvArr* src1, CvScalar scale, const CvArr* src2, CvArr* dst)
.. 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

V
Vadim Pisarevsky 已提交
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

V
Vadim Pisarevsky 已提交
2841
.. math::
2842

V
Vadim Pisarevsky 已提交
2843
    \texttt{dst} (I)= \texttt{scale} \cdot \texttt{src1} (I) +  \texttt{src2} (I)
2844

V
Vadim Pisarevsky 已提交
2845
The function can also be emulated with a matrix expression, for example: ::
2846 2847 2848 2849

    Mat A(3, 3, CV_64F);
    ...
    A.row(0) = A.row(1)*2 + A.row(2);
2850

2851

2852 2853
.. seealso::

2854 2855 2856 2857 2858
    :ocv:func:`add`,
    :ocv:func:`addWeighted`,
    :ocv:func:`subtract`,
    :ocv:func:`Mat::dot`,
    :ocv:func:`Mat::convertTo`,
2859 2860
    :ref:`MatrixExpressions`

V
Vadim Pisarevsky 已提交
2861

2862

2863
setIdentity
V
Vadim Pisarevsky 已提交
2864
-----------
2865
Initializes a scaled identity matrix.
V
Vadim Pisarevsky 已提交
2866

2867
.. ocv:function:: void setIdentity( InputOutputArray mtx, const Scalar& s=Scalar(1) )
2868

2869 2870 2871
.. ocv:pyfunction:: cv2.setIdentity(mtx[, s]) -> None

.. 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

V
Vadim Pisarevsky 已提交
2879
The function
2880
:ocv:func:`setIdentity` initializes a scaled identity matrix:
2881 2882 2883

.. math::

2884
    \texttt{mtx} (i,j)= \fork{\texttt{value}}{ if $i=j$}{0}{otherwise}
2885

V
Vadim Pisarevsky 已提交
2886
The function can also be emulated using the matrix initializers and the matrix expressions: ::
2887 2888 2889

    Mat A = Mat::eye(4, 3, CV_32F)*5;
    // A will be set to [[5, 0, 0], [0, 5, 0], [0, 0, 5], [0, 0, 0]]
2890

2891

2892 2893
.. seealso::

2894 2895
    :ocv:func:`Mat::zeros`,
    :ocv:func:`Mat::ones`,
2896
    :ref:`MatrixExpressions`,
2897 2898
    :ocv:func:`Mat::setTo`,
    :ocv:func:`Mat::operator=`
2899

V
Vadim Pisarevsky 已提交
2900

2901

2902
solve
V
Vadim Pisarevsky 已提交
2903
-----
2904
Solves one or more linear systems or least-squares problems.
V
Vadim Pisarevsky 已提交
2905

2906
.. ocv:function:: bool solve(InputArray src1, InputArray src2, OutputArray dst, int flags=DECOMP_LU)
2907

2908 2909 2910 2911
.. ocv:pyfunction:: cv2.solve(src1, src2[, dst[, flags]]) -> retval, dst

.. ocv:cfunction:: int cvSolve(const CvArr* src1, const CvArr* src2, CvArr* dst, int method=CV_LU)
.. 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

V
Vadim Pisarevsky 已提交
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

V
Vadim Pisarevsky 已提交
2935
.. math::
2936

V
Vadim Pisarevsky 已提交
2937
    \texttt{dst} =  \arg \min _X \| \texttt{src1} \cdot \texttt{X} -  \texttt{src2} \|
2938

V
Vadim Pisarevsky 已提交
2939
If ``DECOMP_LU`` or ``DECOMP_CHOLESKY`` method is used, the function returns 1 if ``src1`` (or
2940 2941
: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.

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 2945
.. seealso::

2946 2947 2948
    :ocv:func:`invert`,
    :ocv:class:`SVD`,
    :ocv:func:`eigen`
2949

V
Vadim Pisarevsky 已提交
2950

2951

2952
solveCubic
2953
----------
2954 2955
Finds the real roots of a cubic equation.

2956
.. ocv:function:: int solveCubic( InputArray coeffs, OutputArray roots )
2957

2958 2959
.. ocv:pyfunction:: cv2.solveCubic(coeffs[, roots]) -> retval, roots

2960 2961
.. ocv:cfunction:: int cvSolveCubic( const CvMat* coeffs, CvMat* roots )

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

V
Vadim Pisarevsky 已提交
2968
The function ``solveCubic`` finds the real roots of a cubic equation:
2969

2970
* if ``coeffs`` is a 4-element vector:
2971 2972 2973

.. math::

V
Vadim Pisarevsky 已提交
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 2979

.. math::

V
Vadim Pisarevsky 已提交
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
V
Vadim Pisarevsky 已提交
2987
---------
2988
Finds the real or complex roots of a polynomial equation.
V
Vadim Pisarevsky 已提交
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

V
Vadim Pisarevsky 已提交
3000
The function ``solvePoly`` finds real and complex roots of a polynomial equation:
3001 3002 3003

.. math::

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
V
Vadim Pisarevsky 已提交
3009
----
3010
Sorts each row or each column of a matrix.
V
Vadim Pisarevsky 已提交
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 3033
.. seealso::

3034 3035
    :ocv:func:`sortIdx`,
    :ocv:func:`randShuffle`
3036

V
Vadim Pisarevsky 已提交
3037

3038

3039
sortIdx
V
Vadim Pisarevsky 已提交
3040
-------
3041
Sorts each row or each column of a matrix.
V
Vadim Pisarevsky 已提交
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 3064 3065 3066 3067

    Mat A = Mat::eye(3,3,CV_32F), B;
    sortIdx(A, B, CV_SORT_EVERY_ROW + CV_SORT_ASCENDING);
    // B will probably contain
    // (because of equal elements in A some permutations are possible):
    // [[1, 2, 0], [0, 2, 1], [0, 1, 2]]
3068

3069

3070 3071
.. seealso::

3072 3073
    :ocv:func:`sort`,
    :ocv:func:`randShuffle`
3074

V
Vadim Pisarevsky 已提交
3075

3076

3077
split
V
Vadim Pisarevsky 已提交
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 3098

.. math::

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 3105
.. seealso::

3106 3107 3108
    :ocv:func:`merge`,
    :ocv:func:`mixChannels`,
    :ocv:func:`cvtColor`
3109

V
Vadim Pisarevsky 已提交
3110

3111

3112
sqrt
V
Vadim Pisarevsky 已提交
3113
----
3114
Calculates a square root of array elements.
V
Vadim Pisarevsky 已提交
3115

3116
.. ocv:function:: void sqrt(InputArray src, OutputArray dst)
3117

3118 3119 3120 3121
.. ocv:pyfunction:: cv2.sqrt(src[, dst]) -> dst

.. ocv:cfunction:: float cvSqrt(float value)
.. 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 3130
.. seealso::

3131 3132
    :ocv:func:`pow`,
    :ocv:func:`magnitude`
3133

V
Vadim Pisarevsky 已提交
3134

3135

3136
subtract
V
Vadim Pisarevsky 已提交
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 3143 3144
.. ocv:pyfunction:: cv2.subtract(src1, src2[, dst[, mask[, dtype]]]) -> dst

.. ocv:cfunction:: void cvSub(const CvArr* src1, const CvArr* src2, CvArr* dst, const CvArr* mask=NULL)
3145 3146
.. ocv:cfunction:: void cvSubRS( const CvArr* src, CvScalar value, CvArr* dst, const CvArr* mask=NULL )
.. ocv:cfunction:: void cvSubS( const CvArr* src, CvScalar value, CvArr* dst, const CvArr* mask=NULL )
3147

3148 3149 3150
.. ocv:pyoldfunction:: cv.Sub(src1, src2, dst, mask=None) -> None
.. ocv:pyoldfunction:: cv.SubRS(src, value, dst, mask=None) -> None
.. 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:
V
Vadim Pisarevsky 已提交
3166

3167
    .. math::
V
Vadim Pisarevsky 已提交
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()``:
V
Vadim Pisarevsky 已提交
3173

3174
    .. math::
V
Vadim Pisarevsky 已提交
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

V
Vadim Pisarevsky 已提交
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 3189 3190
    .. math::

        \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 3202
.. 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.

3203 3204
.. seealso::

3205 3206 3207
    :ocv:func:`add`,
    :ocv:func:`addWeighted`,
    :ocv:func:`scaleAdd`,
3208
    :ocv:func:`Mat::convertTo`,
3209 3210
    :ref:`MatrixExpressions`

3211 3212 3213 3214


SVD
---
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 3222
.. seealso::

3223 3224 3225 3226
    :ocv:func:`invert`,
    :ocv:func:`solve`,
    :ocv:func:`eigen`,
    :ocv:func:`determinant`
3227

V
Vadim Pisarevsky 已提交
3228

3229

3230
SVD::SVD
V
Vadim Pisarevsky 已提交
3231
--------
3232
The constructors.
V
Vadim Pisarevsky 已提交
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 ()
V
Vadim Pisarevsky 已提交
3253
----------------
3254
Performs SVD of a matrix.
V
Vadim Pisarevsky 已提交
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 3273 3274 3275 3276 3277 3278 3279 3280 3281
SVD::compute
------------
Performs SVD of a matrix

.. ocv:function:: static void SVD::compute( InputArray src, OutputArray w, OutputArray u, OutputArray vt, int flags=0 )

.. ocv:function:: static void SVD::compute( InputArray src, OutputArray w, int flags=0 )

.. ocv:pyfunction:: cv2.SVDecomp(src[, w[, u[, vt[, flags]]]]) -> w, u, vt

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 3301

    Mat A, w, u, vt;
    SVD::compute(A, w, u, vt);
3302

3303

3304
SVD::solveZ
V
Vadim Pisarevsky 已提交
3305
-----------
3306
Solves an under-determined singular linear system.
V
Vadim Pisarevsky 已提交
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 3318

.. math::

3319
    dst =  \arg \min _{x:  \| x \| =1}  \| src  \cdot x  \|
3320

3321

3322
SVD::backSubst
V
Vadim Pisarevsky 已提交
3323
--------------
3324 3325 3326 3327 3328 3329 3330
Performs a singular value back substitution.

.. ocv:function:: void SVD::backSubst( InputArray rhs, OutputArray dst ) const

.. ocv:function:: static void SVD::backSubst( InputArray w, InputArray u, InputArray vt, InputArray rhs, OutputArray dst )

.. ocv:pyfunction:: cv2.SVBackSubst(w, u, vt, rhs[, dst]) -> dst
V
Vadim Pisarevsky 已提交
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 3351

.. math::

V
Vadim Pisarevsky 已提交
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
V
Vadim Pisarevsky 已提交
3361
---
3362 3363
Calculates the sum of array elements.

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

V
Vadim Pisarevsky 已提交
3374
The functions ``sum`` calculate and return the sum of array elements, independently for each channel.
3375

3376 3377
.. seealso::

3378 3379 3380 3381 3382 3383
    :ocv:func:`countNonZero`,
    :ocv:func:`mean`,
    :ocv:func:`meanStdDev`,
    :ocv:func:`norm`,
    :ocv:func:`minMaxLoc`,
    :ocv:func:`reduce`
3384

V
Vadim Pisarevsky 已提交
3385

3386

3387
theRNG
V
Vadim Pisarevsky 已提交
3388
------
3389
Returns the default random number generator.
V
Vadim Pisarevsky 已提交
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 3395
:ocv:func:`randu` or
: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 3398
.. seealso::

3399 3400 3401
    :ocv:class:`RNG`,
    :ocv:func:`randu`,
    :ocv:func:`randn`
3402

V
Vadim Pisarevsky 已提交
3403

3404

3405
trace
V
Vadim Pisarevsky 已提交
3406
-----
3407 3408
Returns the trace of a matrix.

3409
.. ocv:function:: Scalar trace( InputArray mtx )
V
Vadim Pisarevsky 已提交
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

V
Vadim Pisarevsky 已提交
3419
The function ``trace`` returns the sum of the diagonal elements of the matrix ``mtx`` .
3420 3421 3422

.. math::

V
Vadim Pisarevsky 已提交
3423
    \mathrm{tr} ( \texttt{mtx} ) =  \sum _i  \texttt{mtx} (i,i)
3424

3425

3426

3427
transform
V
Vadim Pisarevsky 已提交
3428
---------
3429
Performs the matrix transformation of every array element.
V
Vadim Pisarevsky 已提交
3430

3431
.. ocv:function:: void transform( InputArray src, OutputArray dst, InputArray m )
3432

3433
.. ocv:pyfunction:: cv2.transform(src, m[, dst]) -> dst
3434

3435 3436
.. ocv:cfunction:: void cvTransform( const CvArr* src, CvArr* dst, const CvMat* transmat, const CvMat* shiftvec=NULL )

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 3450

.. math::

3451
    \texttt{dst} (I) =  \texttt{m} \cdot \texttt{src} (I)
3452

3453
(when ``m.cols=src.channels()`` ), or
3454

V
Vadim Pisarevsky 已提交
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

V
Vadim Pisarevsky 已提交
3465
The function may be used for geometrical transformation of
3466 3467 3468 3469 3470
``N`` -dimensional
points, arbitrary linear color space transformation (such as various kinds of RGB to YUV transforms), shuffling the image channels, and so forth.

.. seealso::

3471 3472 3473 3474 3475
    :ocv:func:`perspectiveTransform`,
    :ocv:func:`getAffineTransform`,
    :ocv:func:`estimateRigidTransform`,
    :ocv:func:`warpAffine`,
    :ocv:func:`warpPerspective`
3476

V
Vadim Pisarevsky 已提交
3477

3478

3479
transpose
V
Vadim Pisarevsky 已提交
3480
---------
3481
Transposes a matrix.
V
Vadim Pisarevsky 已提交
3482

3483
.. ocv:function:: void transpose(InputArray src, OutputArray dst)
3484

3485 3486 3487 3488
.. ocv:pyfunction:: cv2.transpose(src[, dst]) -> dst

.. ocv:cfunction:: void cvTranspose(const CvArr* src, CvArr* dst)
.. 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 3497

.. math::

V
Vadim Pisarevsky 已提交
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.