Merge remote-tracking branch 'upstream/3.4' into merge-3.4
[platform/upstream/opencv.git] / modules / core / include / opencv2 / core.hpp
1 /*M///////////////////////////////////////////////////////////////////////////////////////
2 //
3 //  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
4 //
5 //  By downloading, copying, installing or using the software you agree to this license.
6 //  If you do not agree to this license, do not download, install,
7 //  copy or use the software.
8 //
9 //
10 //                           License Agreement
11 //                For Open Source Computer Vision Library
12 //
13 // Copyright (C) 2000-2015, Intel Corporation, all rights reserved.
14 // Copyright (C) 2009-2011, Willow Garage Inc., all rights reserved.
15 // Copyright (C) 2015, OpenCV Foundation, all rights reserved.
16 // Copyright (C) 2015, Itseez Inc., all rights reserved.
17 // Third party copyrights are property of their respective owners.
18 //
19 // Redistribution and use in source and binary forms, with or without modification,
20 // are permitted provided that the following conditions are met:
21 //
22 //   * Redistribution's of source code must retain the above copyright notice,
23 //     this list of conditions and the following disclaimer.
24 //
25 //   * Redistribution's in binary form must reproduce the above copyright notice,
26 //     this list of conditions and the following disclaimer in the documentation
27 //     and/or other materials provided with the distribution.
28 //
29 //   * The name of the copyright holders may not be used to endorse or promote products
30 //     derived from this software without specific prior written permission.
31 //
32 // This software is provided by the copyright holders and contributors "as is" and
33 // any express or implied warranties, including, but not limited to, the implied
34 // warranties of merchantability and fitness for a particular purpose are disclaimed.
35 // In no event shall the Intel Corporation or contributors be liable for any direct,
36 // indirect, incidental, special, exemplary, or consequential damages
37 // (including, but not limited to, procurement of substitute goods or services;
38 // loss of use, data, or profits; or business interruption) however caused
39 // and on any theory of liability, whether in contract, strict liability,
40 // or tort (including negligence or otherwise) arising in any way out of
41 // the use of this software, even if advised of the possibility of such damage.
42 //
43 //M*/
44
45 #ifndef OPENCV_CORE_HPP
46 #define OPENCV_CORE_HPP
47
48 #ifndef __cplusplus
49 #  error core.hpp header must be compiled as C++
50 #endif
51
52 #include "opencv2/core/cvdef.h"
53 #include "opencv2/core/version.hpp"
54 #include "opencv2/core/base.hpp"
55 #include "opencv2/core/cvstd.hpp"
56 #include "opencv2/core/traits.hpp"
57 #include "opencv2/core/matx.hpp"
58 #include "opencv2/core/types.hpp"
59 #include "opencv2/core/mat.hpp"
60 #include "opencv2/core/persistence.hpp"
61
62 /**
63 @defgroup core Core functionality
64 @{
65     @defgroup core_basic Basic structures
66     @defgroup core_c C structures and operations
67     @{
68         @defgroup core_c_glue Connections with C++
69     @}
70     @defgroup core_array Operations on arrays
71     @defgroup core_xml XML/YAML Persistence
72     @defgroup core_cluster Clustering
73     @defgroup core_utils Utility and system functions and macros
74     @{
75         @defgroup core_utils_sse SSE utilities
76         @defgroup core_utils_neon NEON utilities
77         @defgroup core_utils_softfloat Softfloat support
78     @}
79     @defgroup core_opengl OpenGL interoperability
80     @defgroup core_ipp Intel IPP Asynchronous C/C++ Converters
81     @defgroup core_optim Optimization Algorithms
82     @defgroup core_directx DirectX interoperability
83     @defgroup core_eigen Eigen support
84     @defgroup core_opencl OpenCL support
85     @defgroup core_va_intel Intel VA-API/OpenCL (CL-VA) interoperability
86     @defgroup core_hal Hardware Acceleration Layer
87     @{
88         @defgroup core_hal_functions Functions
89         @defgroup core_hal_interface Interface
90         @defgroup core_hal_intrin Universal intrinsics
91         @{
92             @defgroup core_hal_intrin_impl Private implementation helpers
93         @}
94     @}
95 @}
96  */
97
98 namespace cv {
99
100 //! @addtogroup core_utils
101 //! @{
102
103 /*! @brief Class passed to an error.
104
105 This class encapsulates all or almost all necessary
106 information about the error happened in the program. The exception is
107 usually constructed and thrown implicitly via CV_Error and CV_Error_ macros.
108 @see error
109  */
110 class CV_EXPORTS Exception : public std::exception
111 {
112 public:
113     /*!
114      Default constructor
115      */
116     Exception();
117     /*!
118      Full constructor. Normally the constructor is not called explicitly.
119      Instead, the macros CV_Error(), CV_Error_() and CV_Assert() are used.
120     */
121     Exception(int _code, const String& _err, const String& _func, const String& _file, int _line);
122     virtual ~Exception() throw();
123
124     /*!
125      \return the error description and the context as a text string.
126     */
127     virtual const char *what() const throw() CV_OVERRIDE;
128     void formatMessage();
129
130     String msg; ///< the formatted error message
131
132     int code; ///< error code @see CVStatus
133     String err; ///< error description
134     String func; ///< function name. Available only when the compiler supports getting it
135     String file; ///< source file name where the error has occurred
136     int line; ///< line number in the source file where the error has occurred
137 };
138
139 /*! @brief Signals an error and raises the exception.
140
141 By default the function prints information about the error to stderr,
142 then it either stops if cv::setBreakOnError() had been called before or raises the exception.
143 It is possible to alternate error processing by using #redirectError().
144 @param exc the exception raisen.
145 @deprecated drop this version
146  */
147 CV_EXPORTS CV_NORETURN void error(const Exception& exc);
148
149 enum SortFlags { SORT_EVERY_ROW    = 0, //!< each matrix row is sorted independently
150                  SORT_EVERY_COLUMN = 1, //!< each matrix column is sorted
151                                         //!< independently; this flag and the previous one are
152                                         //!< mutually exclusive.
153                  SORT_ASCENDING    = 0, //!< each matrix row is sorted in the ascending
154                                         //!< order.
155                  SORT_DESCENDING   = 16 //!< each matrix row is sorted in the
156                                         //!< descending order; this flag and the previous one are also
157                                         //!< mutually exclusive.
158                };
159
160 //! @} core_utils
161
162 //! @addtogroup core
163 //! @{
164
165 //! Covariation flags
166 enum CovarFlags {
167     /** The output covariance matrix is calculated as:
168        \f[\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}  ,...],\f]
169        The covariance matrix will be nsamples x nsamples. Such an unusual covariance matrix is used
170        for fast PCA of a set of very large vectors (see, for example, the EigenFaces technique for
171        face recognition). Eigenvalues of this "scrambled" matrix match the eigenvalues of the true
172        covariance matrix. The "true" eigenvectors can be easily calculated from the eigenvectors of
173        the "scrambled" covariance matrix. */
174     COVAR_SCRAMBLED = 0,
175     /**The output covariance matrix is calculated as:
176         \f[\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,\f]
177         covar will be a square matrix of the same size as the total number of elements in each input
178         vector. One and only one of #COVAR_SCRAMBLED and #COVAR_NORMAL must be specified.*/
179     COVAR_NORMAL    = 1,
180     /** If the flag is specified, the function does not calculate mean from
181         the input vectors but, instead, uses the passed mean vector. This is useful if mean has been
182         pre-calculated or known in advance, or if the covariance matrix is calculated by parts. In
183         this case, mean is not a mean vector of the input sub-set of vectors but rather the mean
184         vector of the whole set.*/
185     COVAR_USE_AVG   = 2,
186     /** If the flag is specified, the covariance matrix is scaled. In the
187         "normal" mode, scale is 1./nsamples . In the "scrambled" mode, scale is the reciprocal of the
188         total number of elements in each input vector. By default (if the flag is not specified), the
189         covariance matrix is not scaled ( scale=1 ).*/
190     COVAR_SCALE     = 4,
191     /** If the flag is
192         specified, all the input vectors are stored as rows of the samples matrix. mean should be a
193         single-row vector in this case.*/
194     COVAR_ROWS      = 8,
195     /** If the flag is
196         specified, all the input vectors are stored as columns of the samples matrix. mean should be a
197         single-column vector in this case.*/
198     COVAR_COLS      = 16
199 };
200
201 //! k-Means flags
202 enum KmeansFlags {
203     /** Select random initial centers in each attempt.*/
204     KMEANS_RANDOM_CENTERS     = 0,
205     /** Use kmeans++ center initialization by Arthur and Vassilvitskii [Arthur2007].*/
206     KMEANS_PP_CENTERS         = 2,
207     /** During the first (and possibly the only) attempt, use the
208         user-supplied labels instead of computing them from the initial centers. For the second and
209         further attempts, use the random or semi-random centers. Use one of KMEANS_\*_CENTERS flag
210         to specify the exact method.*/
211     KMEANS_USE_INITIAL_LABELS = 1
212 };
213
214 //! type of line
215 enum LineTypes {
216     FILLED  = -1,
217     LINE_4  = 4, //!< 4-connected line
218     LINE_8  = 8, //!< 8-connected line
219     LINE_AA = 16 //!< antialiased line
220 };
221
222 //! Only a subset of Hershey fonts <https://en.wikipedia.org/wiki/Hershey_fonts> are supported
223 enum HersheyFonts {
224     FONT_HERSHEY_SIMPLEX        = 0, //!< normal size sans-serif font
225     FONT_HERSHEY_PLAIN          = 1, //!< small size sans-serif font
226     FONT_HERSHEY_DUPLEX         = 2, //!< normal size sans-serif font (more complex than FONT_HERSHEY_SIMPLEX)
227     FONT_HERSHEY_COMPLEX        = 3, //!< normal size serif font
228     FONT_HERSHEY_TRIPLEX        = 4, //!< normal size serif font (more complex than FONT_HERSHEY_COMPLEX)
229     FONT_HERSHEY_COMPLEX_SMALL  = 5, //!< smaller version of FONT_HERSHEY_COMPLEX
230     FONT_HERSHEY_SCRIPT_SIMPLEX = 6, //!< hand-writing style font
231     FONT_HERSHEY_SCRIPT_COMPLEX = 7, //!< more complex variant of FONT_HERSHEY_SCRIPT_SIMPLEX
232     FONT_ITALIC                 = 16 //!< flag for italic font
233 };
234
235 enum ReduceTypes { REDUCE_SUM = 0, //!< the output is the sum of all rows/columns of the matrix.
236                    REDUCE_AVG = 1, //!< the output is the mean vector of all rows/columns of the matrix.
237                    REDUCE_MAX = 2, //!< the output is the maximum (column/row-wise) of all rows/columns of the matrix.
238                    REDUCE_MIN = 3  //!< the output is the minimum (column/row-wise) of all rows/columns of the matrix.
239                  };
240
241
242 /** @brief Swaps two matrices
243 */
244 CV_EXPORTS void swap(Mat& a, Mat& b);
245 /** @overload */
246 CV_EXPORTS void swap( UMat& a, UMat& b );
247
248 //! @} core
249
250 //! @addtogroup core_array
251 //! @{
252
253 /** @brief Computes the source location of an extrapolated pixel.
254
255 The function computes and returns the coordinate of a donor pixel corresponding to the specified
256 extrapolated pixel when using the specified extrapolation border mode. For example, if you use
257 cv::BORDER_WRAP mode in the horizontal direction, cv::BORDER_REFLECT_101 in the vertical direction and
258 want to compute value of the "virtual" pixel Point(-5, 100) in a floating-point image img , it
259 looks like:
260 @code{.cpp}
261     float val = img.at<float>(borderInterpolate(100, img.rows, cv::BORDER_REFLECT_101),
262                               borderInterpolate(-5, img.cols, cv::BORDER_WRAP));
263 @endcode
264 Normally, the function is not called directly. It is used inside filtering functions and also in
265 copyMakeBorder.
266 @param p 0-based coordinate of the extrapolated pixel along one of the axes, likely \<0 or \>= len
267 @param len Length of the array along the corresponding axis.
268 @param borderType Border type, one of the #BorderTypes, except for #BORDER_TRANSPARENT and
269 #BORDER_ISOLATED . When borderType==#BORDER_CONSTANT , the function always returns -1, regardless
270 of p and len.
271
272 @sa copyMakeBorder
273 */
274 CV_EXPORTS_W int borderInterpolate(int p, int len, int borderType);
275
276 /** @example copyMakeBorder_demo.cpp
277 An example using copyMakeBorder function
278  */
279 /** @brief Forms a border around an image.
280
281 The function copies the source image into the middle of the destination image. The areas to the
282 left, to the right, above and below the copied source image will be filled with extrapolated
283 pixels. This is not what filtering functions based on it do (they extrapolate pixels on-fly), but
284 what other more complex functions, including your own, may do to simplify image boundary handling.
285
286 The function supports the mode when src is already in the middle of dst . In this case, the
287 function does not copy src itself but simply constructs the border, for example:
288
289 @code{.cpp}
290     // let border be the same in all directions
291     int border=2;
292     // constructs a larger image to fit both the image and the border
293     Mat gray_buf(rgb.rows + border*2, rgb.cols + border*2, rgb.depth());
294     // select the middle part of it w/o copying data
295     Mat gray(gray_canvas, Rect(border, border, rgb.cols, rgb.rows));
296     // convert image from RGB to grayscale
297     cvtColor(rgb, gray, COLOR_RGB2GRAY);
298     // form a border in-place
299     copyMakeBorder(gray, gray_buf, border, border,
300                    border, border, BORDER_REPLICATE);
301     // now do some custom filtering ...
302     ...
303 @endcode
304 @note When the source image is a part (ROI) of a bigger image, the function will try to use the
305 pixels outside of the ROI to form a border. To disable this feature and always do extrapolation, as
306 if src was not a ROI, use borderType | #BORDER_ISOLATED.
307
308 @param src Source image.
309 @param dst Destination image of the same type as src and the size Size(src.cols+left+right,
310 src.rows+top+bottom) .
311 @param top
312 @param bottom
313 @param left
314 @param right Parameter specifying how many pixels in each direction from the source image rectangle
315 to extrapolate. For example, top=1, bottom=1, left=1, right=1 mean that 1 pixel-wide border needs
316 to be built.
317 @param borderType Border type. See borderInterpolate for details.
318 @param value Border value if borderType==BORDER_CONSTANT .
319
320 @sa  borderInterpolate
321 */
322 CV_EXPORTS_W void copyMakeBorder(InputArray src, OutputArray dst,
323                                  int top, int bottom, int left, int right,
324                                  int borderType, const Scalar& value = Scalar() );
325
326 /** @brief Calculates the per-element sum of two arrays or an array and a scalar.
327
328 The function add calculates:
329 - Sum of two arrays when both input arrays have the same size and the same number of channels:
330 \f[\texttt{dst}(I) =  \texttt{saturate} ( \texttt{src1}(I) +  \texttt{src2}(I)) \quad \texttt{if mask}(I) \ne0\f]
331 - Sum of an array and a scalar when src2 is constructed from Scalar or has the same number of
332 elements as `src1.channels()`:
333 \f[\texttt{dst}(I) =  \texttt{saturate} ( \texttt{src1}(I) +  \texttt{src2} ) \quad \texttt{if mask}(I) \ne0\f]
334 - Sum of a scalar and an array when src1 is constructed from Scalar or has the same number of
335 elements as `src2.channels()`:
336 \f[\texttt{dst}(I) =  \texttt{saturate} ( \texttt{src1} +  \texttt{src2}(I) ) \quad \texttt{if mask}(I) \ne0\f]
337 where `I` is a multi-dimensional index of array elements. In case of multi-channel arrays, each
338 channel is processed independently.
339
340 The first function in the list above can be replaced with matrix expressions:
341 @code{.cpp}
342     dst = src1 + src2;
343     dst += src1; // equivalent to add(dst, src1, dst);
344 @endcode
345 The input arrays and the output array can all have the same or different depths. For example, you
346 can add a 16-bit unsigned array to a 8-bit signed array and store the sum as a 32-bit
347 floating-point array. Depth of the output array is determined by the dtype parameter. In the second
348 and third cases above, as well as in the first case, when src1.depth() == src2.depth(), dtype can
349 be set to the default -1. In this case, the output array will have the same depth as the input
350 array, be it src1, src2 or both.
351 @note Saturation is not applied when the output array has the depth CV_32S. You may even get
352 result of an incorrect sign in the case of overflow.
353 @param src1 first input array or a scalar.
354 @param src2 second input array or a scalar.
355 @param dst output array that has the same size and number of channels as the input array(s); the
356 depth is defined by dtype or src1/src2.
357 @param mask optional operation mask - 8-bit single channel array, that specifies elements of the
358 output array to be changed.
359 @param dtype optional depth of the output array (see the discussion below).
360 @sa subtract, addWeighted, scaleAdd, Mat::convertTo
361 */
362 CV_EXPORTS_W void add(InputArray src1, InputArray src2, OutputArray dst,
363                       InputArray mask = noArray(), int dtype = -1);
364
365 /** @brief Calculates the per-element difference between two arrays or array and a scalar.
366
367 The function subtract calculates:
368 - Difference between two arrays, when both input arrays have the same size and the same number of
369 channels:
370     \f[\texttt{dst}(I) =  \texttt{saturate} ( \texttt{src1}(I) -  \texttt{src2}(I)) \quad \texttt{if mask}(I) \ne0\f]
371 - Difference between an array and a scalar, when src2 is constructed from Scalar or has the same
372 number of elements as `src1.channels()`:
373     \f[\texttt{dst}(I) =  \texttt{saturate} ( \texttt{src1}(I) -  \texttt{src2} ) \quad \texttt{if mask}(I) \ne0\f]
374 - Difference between a scalar and an array, when src1 is constructed from Scalar or has the same
375 number of elements as `src2.channels()`:
376     \f[\texttt{dst}(I) =  \texttt{saturate} ( \texttt{src1} -  \texttt{src2}(I) ) \quad \texttt{if mask}(I) \ne0\f]
377 - The reverse difference between a scalar and an array in the case of `SubRS`:
378     \f[\texttt{dst}(I) =  \texttt{saturate} ( \texttt{src2} -  \texttt{src1}(I) ) \quad \texttt{if mask}(I) \ne0\f]
379 where I is a multi-dimensional index of array elements. In case of multi-channel arrays, each
380 channel is processed independently.
381
382 The first function in the list above can be replaced with matrix expressions:
383 @code{.cpp}
384     dst = src1 - src2;
385     dst -= src1; // equivalent to subtract(dst, src1, dst);
386 @endcode
387 The input arrays and the output array can all have the same or different depths. For example, you
388 can subtract to 8-bit unsigned arrays and store the difference in a 16-bit signed array. Depth of
389 the output array is determined by dtype parameter. In the second and third cases above, as well as
390 in the first case, when src1.depth() == src2.depth(), dtype can be set to the default -1. In this
391 case the output array will have the same depth as the input array, be it src1, src2 or both.
392 @note Saturation is not applied when the output array has the depth CV_32S. You may even get
393 result of an incorrect sign in the case of overflow.
394 @param src1 first input array or a scalar.
395 @param src2 second input array or a scalar.
396 @param dst output array of the same size and the same number of channels as the input array.
397 @param mask optional operation mask; this is an 8-bit single channel array that specifies elements
398 of the output array to be changed.
399 @param dtype optional depth of the output array
400 @sa  add, addWeighted, scaleAdd, Mat::convertTo
401   */
402 CV_EXPORTS_W void subtract(InputArray src1, InputArray src2, OutputArray dst,
403                            InputArray mask = noArray(), int dtype = -1);
404
405
406 /** @brief Calculates the per-element scaled product of two arrays.
407
408 The function multiply calculates the per-element product of two arrays:
409
410 \f[\texttt{dst} (I)= \texttt{saturate} ( \texttt{scale} \cdot \texttt{src1} (I)  \cdot \texttt{src2} (I))\f]
411
412 There is also a @ref MatrixExpressions -friendly variant of the first function. See Mat::mul .
413
414 For a not-per-element matrix product, see gemm .
415
416 @note Saturation is not applied when the output array has the depth
417 CV_32S. You may even get result of an incorrect sign in the case of
418 overflow.
419 @param src1 first input array.
420 @param src2 second input array of the same size and the same type as src1.
421 @param dst output array of the same size and type as src1.
422 @param scale optional scale factor.
423 @param dtype optional depth of the output array
424 @sa add, subtract, divide, scaleAdd, addWeighted, accumulate, accumulateProduct, accumulateSquare,
425 Mat::convertTo
426 */
427 CV_EXPORTS_W void multiply(InputArray src1, InputArray src2,
428                            OutputArray dst, double scale = 1, int dtype = -1);
429
430 /** @brief Performs per-element division of two arrays or a scalar by an array.
431
432 The function cv::divide divides one array by another:
433 \f[\texttt{dst(I) = saturate(src1(I)*scale/src2(I))}\f]
434 or a scalar by an array when there is no src1 :
435 \f[\texttt{dst(I) = saturate(scale/src2(I))}\f]
436
437 When src2(I) is zero, dst(I) will also be zero. Different channels of
438 multi-channel arrays are processed independently.
439
440 @note Saturation is not applied when the output array has the depth CV_32S. You may even get
441 result of an incorrect sign in the case of overflow.
442 @param src1 first input array.
443 @param src2 second input array of the same size and type as src1.
444 @param scale scalar factor.
445 @param dst output array of the same size and type as src2.
446 @param dtype optional depth of the output array; if -1, dst will have depth src2.depth(), but in
447 case of an array-by-array division, you can only pass -1 when src1.depth()==src2.depth().
448 @sa  multiply, add, subtract
449 */
450 CV_EXPORTS_W void divide(InputArray src1, InputArray src2, OutputArray dst,
451                          double scale = 1, int dtype = -1);
452
453 /** @overload */
454 CV_EXPORTS_W void divide(double scale, InputArray src2,
455                          OutputArray dst, int dtype = -1);
456
457 /** @brief Calculates the sum of a scaled array and another array.
458
459 The function scaleAdd is one of the classical primitive linear algebra operations, known as DAXPY
460 or SAXPY in [BLAS](http://en.wikipedia.org/wiki/Basic_Linear_Algebra_Subprograms). It calculates
461 the sum of a scaled array and another array:
462 \f[\texttt{dst} (I)= \texttt{scale} \cdot \texttt{src1} (I) +  \texttt{src2} (I)\f]
463 The function can also be emulated with a matrix expression, for example:
464 @code{.cpp}
465     Mat A(3, 3, CV_64F);
466     ...
467     A.row(0) = A.row(1)*2 + A.row(2);
468 @endcode
469 @param src1 first input array.
470 @param alpha scale factor for the first array.
471 @param src2 second input array of the same size and type as src1.
472 @param dst output array of the same size and type as src1.
473 @sa add, addWeighted, subtract, Mat::dot, Mat::convertTo
474 */
475 CV_EXPORTS_W void scaleAdd(InputArray src1, double alpha, InputArray src2, OutputArray dst);
476
477 /** @example AddingImagesTrackbar.cpp
478
479  */
480 /** @brief Calculates the weighted sum of two arrays.
481
482 The function addWeighted calculates the weighted sum of two arrays as follows:
483 \f[\texttt{dst} (I)= \texttt{saturate} ( \texttt{src1} (I)* \texttt{alpha} +  \texttt{src2} (I)* \texttt{beta} +  \texttt{gamma} )\f]
484 where I is a multi-dimensional index of array elements. In case of multi-channel arrays, each
485 channel is processed independently.
486 The function can be replaced with a matrix expression:
487 @code{.cpp}
488     dst = src1*alpha + src2*beta + gamma;
489 @endcode
490 @note Saturation is not applied when the output array has the depth CV_32S. You may even get
491 result of an incorrect sign in the case of overflow.
492 @param src1 first input array.
493 @param alpha weight of the first array elements.
494 @param src2 second input array of the same size and channel number as src1.
495 @param beta weight of the second array elements.
496 @param gamma scalar added to each sum.
497 @param dst output array that has the same size and number of channels as the input arrays.
498 @param dtype optional depth of the output array; when both input arrays have the same depth, dtype
499 can be set to -1, which will be equivalent to src1.depth().
500 @sa  add, subtract, scaleAdd, Mat::convertTo
501 */
502 CV_EXPORTS_W void addWeighted(InputArray src1, double alpha, InputArray src2,
503                               double beta, double gamma, OutputArray dst, int dtype = -1);
504
505 /** @brief Scales, calculates absolute values, and converts the result to 8-bit.
506
507 On each element of the input array, the function convertScaleAbs
508 performs three operations sequentially: scaling, taking an absolute
509 value, conversion to an unsigned 8-bit type:
510 \f[\texttt{dst} (I)= \texttt{saturate\_cast<uchar>} (| \texttt{src} (I)* \texttt{alpha} +  \texttt{beta} |)\f]
511 In case of multi-channel arrays, the function processes each channel
512 independently. When the output is not 8-bit, the operation can be
513 emulated by calling the Mat::convertTo method (or by using matrix
514 expressions) and then by calculating an absolute value of the result.
515 For example:
516 @code{.cpp}
517     Mat_<float> A(30,30);
518     randu(A, Scalar(-100), Scalar(100));
519     Mat_<float> B = A*5 + 3;
520     B = abs(B);
521     // Mat_<float> B = abs(A*5+3) will also do the job,
522     // but it will allocate a temporary matrix
523 @endcode
524 @param src input array.
525 @param dst output array.
526 @param alpha optional scale factor.
527 @param beta optional delta added to the scaled values.
528 @sa  Mat::convertTo, cv::abs(const Mat&)
529 */
530 CV_EXPORTS_W void convertScaleAbs(InputArray src, OutputArray dst,
531                                   double alpha = 1, double beta = 0);
532
533 /** @brief Converts an array to half precision floating number.
534
535 This function converts FP32 (single precision floating point) from/to FP16 (half precision floating point). CV_16S format is used to represent FP16 data.
536 There are two use modes (src -> dst): CV_32F -> CV_16S and CV_16S -> CV_32F. The input array has to have type of CV_32F or
537 CV_16S to represent the bit depth. If the input array is neither of them, the function will raise an error.
538 The format of half precision floating point is defined in IEEE 754-2008.
539
540 @param src input array.
541 @param dst output array.
542 */
543 CV_EXPORTS_W void convertFp16(InputArray src, OutputArray dst);
544
545 /** @brief Performs a look-up table transform of an array.
546
547 The function LUT fills the output array with values from the look-up table. Indices of the entries
548 are taken from the input array. That is, the function processes each element of src as follows:
549 \f[\texttt{dst} (I)  \leftarrow \texttt{lut(src(I) + d)}\f]
550 where
551 \f[d =  \fork{0}{if \(\texttt{src}\) has depth \(\texttt{CV_8U}\)}{128}{if \(\texttt{src}\) has depth \(\texttt{CV_8S}\)}\f]
552 @param src input array of 8-bit elements.
553 @param lut look-up table of 256 elements; in case of multi-channel input array, the table should
554 either have a single channel (in this case the same table is used for all channels) or the same
555 number of channels as in the input array.
556 @param dst output array of the same size and number of channels as src, and the same depth as lut.
557 @sa  convertScaleAbs, Mat::convertTo
558 */
559 CV_EXPORTS_W void LUT(InputArray src, InputArray lut, OutputArray dst);
560
561 /** @brief Calculates the sum of array elements.
562
563 The function cv::sum calculates and returns the sum of array elements,
564 independently for each channel.
565 @param src input array that must have from 1 to 4 channels.
566 @sa  countNonZero, mean, meanStdDev, norm, minMaxLoc, reduce
567 */
568 CV_EXPORTS_AS(sumElems) Scalar sum(InputArray src);
569
570 /** @brief Counts non-zero array elements.
571
572 The function returns the number of non-zero elements in src :
573 \f[\sum _{I: \; \texttt{src} (I) \ne0 } 1\f]
574 @param src single-channel array.
575 @sa  mean, meanStdDev, norm, minMaxLoc, calcCovarMatrix
576 */
577 CV_EXPORTS_W int countNonZero( InputArray src );
578
579 /** @brief Returns the list of locations of non-zero pixels
580
581 Given a binary matrix (likely returned from an operation such
582 as threshold(), compare(), >, ==, etc, return all of
583 the non-zero indices as a cv::Mat or std::vector<cv::Point> (x,y)
584 For example:
585 @code{.cpp}
586     cv::Mat binaryImage; // input, binary image
587     cv::Mat locations;   // output, locations of non-zero pixels
588     cv::findNonZero(binaryImage, locations);
589
590     // access pixel coordinates
591     Point pnt = locations.at<Point>(i);
592 @endcode
593 or
594 @code{.cpp}
595     cv::Mat binaryImage; // input, binary image
596     vector<Point> locations;   // output, locations of non-zero pixels
597     cv::findNonZero(binaryImage, locations);
598
599     // access pixel coordinates
600     Point pnt = locations[i];
601 @endcode
602 @param src single-channel array
603 @param idx the output array, type of cv::Mat or std::vector<Point>, corresponding to non-zero indices in the input
604 */
605 CV_EXPORTS_W void findNonZero( InputArray src, OutputArray idx );
606
607 /** @brief Calculates an average (mean) of array elements.
608
609 The function cv::mean calculates the mean value M of array elements,
610 independently for each channel, and return it:
611 \f[\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}\f]
612 When all the mask elements are 0's, the function returns Scalar::all(0)
613 @param src input array that should have from 1 to 4 channels so that the result can be stored in
614 Scalar_ .
615 @param mask optional operation mask.
616 @sa  countNonZero, meanStdDev, norm, minMaxLoc
617 */
618 CV_EXPORTS_W Scalar mean(InputArray src, InputArray mask = noArray());
619
620 /** Calculates a mean and standard deviation of array elements.
621
622 The function cv::meanStdDev calculates the mean and the standard deviation M
623 of array elements independently for each channel and returns it via the
624 output parameters:
625 \f[\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}\f]
626 When all the mask elements are 0's, the function returns
627 mean=stddev=Scalar::all(0).
628 @note The calculated standard deviation is only the diagonal of the
629 complete normalized covariance matrix. If the full matrix is needed, you
630 can reshape the multi-channel array M x N to the single-channel array
631 M\*N x mtx.channels() (only possible when the matrix is continuous) and
632 then pass the matrix to calcCovarMatrix .
633 @param src input array that should have from 1 to 4 channels so that the results can be stored in
634 Scalar_ 's.
635 @param mean output parameter: calculated mean value.
636 @param stddev output parameter: calculated standard deviation.
637 @param mask optional operation mask.
638 @sa  countNonZero, mean, norm, minMaxLoc, calcCovarMatrix
639 */
640 CV_EXPORTS_W void meanStdDev(InputArray src, OutputArray mean, OutputArray stddev,
641                              InputArray mask=noArray());
642
643 /** @brief Calculates the  absolute norm of an array.
644
645 This version of #norm calculates the absolute norm of src1. The type of norm to calculate is specified using #NormTypes.
646
647 As example for one array consider the function \f$r(x)= \begin{pmatrix} x \\ 1-x \end{pmatrix}, x \in [-1;1]\f$.
648 The \f$ L_{1}, L_{2} \f$ and \f$ L_{\infty} \f$ norm for the sample value \f$r(-1) = \begin{pmatrix} -1 \\ 2 \end{pmatrix}\f$
649 is calculated as follows
650 \f{align*}
651     \| r(-1) \|_{L_1} &= |-1| + |2| = 3 \\
652     \| r(-1) \|_{L_2} &= \sqrt{(-1)^{2} + (2)^{2}} = \sqrt{5} \\
653     \| r(-1) \|_{L_\infty} &= \max(|-1|,|2|) = 2
654 \f}
655 and for \f$r(0.5) = \begin{pmatrix} 0.5 \\ 0.5 \end{pmatrix}\f$ the calculation is
656 \f{align*}
657     \| r(0.5) \|_{L_1} &= |0.5| + |0.5| = 1 \\
658     \| r(0.5) \|_{L_2} &= \sqrt{(0.5)^{2} + (0.5)^{2}} = \sqrt{0.5} \\
659     \| r(0.5) \|_{L_\infty} &= \max(|0.5|,|0.5|) = 0.5.
660 \f}
661 The following graphic shows all values for the three norm functions \f$\| r(x) \|_{L_1}, \| r(x) \|_{L_2}\f$ and \f$\| r(x) \|_{L_\infty}\f$.
662 It is notable that the \f$ L_{1} \f$ norm forms the upper and the \f$ L_{\infty} \f$ norm forms the lower border for the example function \f$ r(x) \f$.
663 ![Graphs for the different norm functions from the above example](pics/NormTypes_OneArray_1-2-INF.png)
664
665 When the mask parameter is specified and it is not empty, the norm is
666
667 If normType is not specified, #NORM_L2 is used.
668 calculated only over the region specified by the mask.
669
670 Multi-channel input arrays are treated as single-channel arrays, that is,
671 the results for all channels are combined.
672
673 Hamming norms can only be calculated with CV_8U depth arrays.
674
675 @param src1 first input array.
676 @param normType type of the norm (see #NormTypes).
677 @param mask optional operation mask; it must have the same size as src1 and CV_8UC1 type.
678 */
679 CV_EXPORTS_W double norm(InputArray src1, int normType = NORM_L2, InputArray mask = noArray());
680
681 /** @brief Calculates an absolute difference norm or a relative difference norm.
682
683 This version of cv::norm calculates the absolute difference norm
684 or the relative difference norm of arrays src1 and src2.
685 The type of norm to calculate is specified using #NormTypes.
686
687 @param src1 first input array.
688 @param src2 second input array of the same size and the same type as src1.
689 @param normType type of the norm (see #NormTypes).
690 @param mask optional operation mask; it must have the same size as src1 and CV_8UC1 type.
691 */
692 CV_EXPORTS_W double norm(InputArray src1, InputArray src2,
693                          int normType = NORM_L2, InputArray mask = noArray());
694 /** @overload
695 @param src first input array.
696 @param normType type of the norm (see #NormTypes).
697 */
698 CV_EXPORTS double norm( const SparseMat& src, int normType );
699
700 /** @brief Computes the Peak Signal-to-Noise Ratio (PSNR) image quality metric.
701
702 This function calculates the Peak Signal-to-Noise Ratio (PSNR) image quality metric in decibels (dB),
703 between two input arrays src1 and src2. The arrays must have the same type.
704
705 The PSNR is calculated as follows:
706
707 \f[
708 \texttt{PSNR} = 10 \cdot \log_{10}{\left( \frac{R^2}{MSE} \right) }
709 \f]
710
711 where R is the maximum integer value of depth (e.g. 255 in the case of CV_8U data)
712 and MSE is the mean squared error between the two arrays.
713
714 @param src1 first input array.
715 @param src2 second input array of the same size as src1.
716 @param R the maximum pixel value (255 by default)
717
718   */
719 CV_EXPORTS_W double PSNR(InputArray src1, InputArray src2, double R=255.);
720
721 /** @brief naive nearest neighbor finder
722
723 see http://en.wikipedia.org/wiki/Nearest_neighbor_search
724 @todo document
725   */
726 CV_EXPORTS_W void batchDistance(InputArray src1, InputArray src2,
727                                 OutputArray dist, int dtype, OutputArray nidx,
728                                 int normType = NORM_L2, int K = 0,
729                                 InputArray mask = noArray(), int update = 0,
730                                 bool crosscheck = false);
731
732 /** @brief Normalizes the norm or value range of an array.
733
734 The function cv::normalize normalizes scale and shift the input array elements so that
735 \f[\| \texttt{dst} \| _{L_p}= \texttt{alpha}\f]
736 (where p=Inf, 1 or 2) when normType=NORM_INF, NORM_L1, or NORM_L2, respectively; or so that
737 \f[\min _I  \texttt{dst} (I)= \texttt{alpha} , \, \, \max _I  \texttt{dst} (I)= \texttt{beta}\f]
738
739 when normType=NORM_MINMAX (for dense arrays only). The optional mask specifies a sub-array to be
740 normalized. This means that the norm or min-n-max are calculated over the sub-array, and then this
741 sub-array is modified to be normalized. If you want to only use the mask to calculate the norm or
742 min-max but modify the whole array, you can use norm and Mat::convertTo.
743
744 In case of sparse matrices, only the non-zero values are analyzed and transformed. Because of this,
745 the range transformation for sparse matrices is not allowed since it can shift the zero level.
746
747 Possible usage with some positive example data:
748 @code{.cpp}
749     vector<double> positiveData = { 2.0, 8.0, 10.0 };
750     vector<double> normalizedData_l1, normalizedData_l2, normalizedData_inf, normalizedData_minmax;
751
752     // Norm to probability (total count)
753     // sum(numbers) = 20.0
754     // 2.0      0.1     (2.0/20.0)
755     // 8.0      0.4     (8.0/20.0)
756     // 10.0     0.5     (10.0/20.0)
757     normalize(positiveData, normalizedData_l1, 1.0, 0.0, NORM_L1);
758
759     // Norm to unit vector: ||positiveData|| = 1.0
760     // 2.0      0.15
761     // 8.0      0.62
762     // 10.0     0.77
763     normalize(positiveData, normalizedData_l2, 1.0, 0.0, NORM_L2);
764
765     // Norm to max element
766     // 2.0      0.2     (2.0/10.0)
767     // 8.0      0.8     (8.0/10.0)
768     // 10.0     1.0     (10.0/10.0)
769     normalize(positiveData, normalizedData_inf, 1.0, 0.0, NORM_INF);
770
771     // Norm to range [0.0;1.0]
772     // 2.0      0.0     (shift to left border)
773     // 8.0      0.75    (6.0/8.0)
774     // 10.0     1.0     (shift to right border)
775     normalize(positiveData, normalizedData_minmax, 1.0, 0.0, NORM_MINMAX);
776 @endcode
777
778 @param src input array.
779 @param dst output array of the same size as src .
780 @param alpha norm value to normalize to or the lower range boundary in case of the range
781 normalization.
782 @param beta upper range boundary in case of the range normalization; it is not used for the norm
783 normalization.
784 @param norm_type normalization type (see cv::NormTypes).
785 @param dtype when negative, the output array has the same type as src; otherwise, it has the same
786 number of channels as src and the depth =CV_MAT_DEPTH(dtype).
787 @param mask optional operation mask.
788 @sa norm, Mat::convertTo, SparseMat::convertTo
789 */
790 CV_EXPORTS_W void normalize( InputArray src, InputOutputArray dst, double alpha = 1, double beta = 0,
791                              int norm_type = NORM_L2, int dtype = -1, InputArray mask = noArray());
792
793 /** @overload
794 @param src input array.
795 @param dst output array of the same size as src .
796 @param alpha norm value to normalize to or the lower range boundary in case of the range
797 normalization.
798 @param normType normalization type (see cv::NormTypes).
799 */
800 CV_EXPORTS void normalize( const SparseMat& src, SparseMat& dst, double alpha, int normType );
801
802 /** @brief Finds the global minimum and maximum in an array.
803
804 The function cv::minMaxLoc finds the minimum and maximum element values and their positions. The
805 extremums are searched across the whole array or, if mask is not an empty array, in the specified
806 array region.
807
808 The function do not work with multi-channel arrays. If you need to find minimum or maximum
809 elements across all the channels, use Mat::reshape first to reinterpret the array as
810 single-channel. Or you may extract the particular channel using either extractImageCOI , or
811 mixChannels , or split .
812 @param src input single-channel array.
813 @param minVal pointer to the returned minimum value; NULL is used if not required.
814 @param maxVal pointer to the returned maximum value; NULL is used if not required.
815 @param minLoc pointer to the returned minimum location (in 2D case); NULL is used if not required.
816 @param maxLoc pointer to the returned maximum location (in 2D case); NULL is used if not required.
817 @param mask optional mask used to select a sub-array.
818 @sa max, min, compare, inRange, extractImageCOI, mixChannels, split, Mat::reshape
819 */
820 CV_EXPORTS_W void minMaxLoc(InputArray src, CV_OUT double* minVal,
821                             CV_OUT double* maxVal = 0, CV_OUT Point* minLoc = 0,
822                             CV_OUT Point* maxLoc = 0, InputArray mask = noArray());
823
824
825 /** @brief Finds the global minimum and maximum in an array
826
827 The function cv::minMaxIdx finds the minimum and maximum element values and their positions. The
828 extremums are searched across the whole array or, if mask is not an empty array, in the specified
829 array region. The function does not work with multi-channel arrays. If you need to find minimum or
830 maximum elements across all the channels, use Mat::reshape first to reinterpret the array as
831 single-channel. Or you may extract the particular channel using either extractImageCOI , or
832 mixChannels , or split . In case of a sparse matrix, the minimum is found among non-zero elements
833 only.
834 @note When minIdx is not NULL, it must have at least 2 elements (as well as maxIdx), even if src is
835 a single-row or single-column matrix. In OpenCV (following MATLAB) each array has at least 2
836 dimensions, i.e. single-column matrix is Mx1 matrix (and therefore minIdx/maxIdx will be
837 (i1,0)/(i2,0)) and single-row matrix is 1xN matrix (and therefore minIdx/maxIdx will be
838 (0,j1)/(0,j2)).
839 @param src input single-channel array.
840 @param minVal pointer to the returned minimum value; NULL is used if not required.
841 @param maxVal pointer to the returned maximum value; NULL is used if not required.
842 @param minIdx pointer to the returned minimum location (in nD case); NULL is used if not required;
843 Otherwise, it must point to an array of src.dims elements, the coordinates of the minimum element
844 in each dimension are stored there sequentially.
845 @param maxIdx pointer to the returned maximum location (in nD case). NULL is used if not required.
846 @param mask specified array region
847 */
848 CV_EXPORTS void minMaxIdx(InputArray src, double* minVal, double* maxVal = 0,
849                           int* minIdx = 0, int* maxIdx = 0, InputArray mask = noArray());
850
851 /** @overload
852 @param a input single-channel array.
853 @param minVal pointer to the returned minimum value; NULL is used if not required.
854 @param maxVal pointer to the returned maximum value; NULL is used if not required.
855 @param minIdx pointer to the returned minimum location (in nD case); NULL is used if not required;
856 Otherwise, it must point to an array of src.dims elements, the coordinates of the minimum element
857 in each dimension are stored there sequentially.
858 @param maxIdx pointer to the returned maximum location (in nD case). NULL is used if not required.
859 */
860 CV_EXPORTS void minMaxLoc(const SparseMat& a, double* minVal,
861                           double* maxVal, int* minIdx = 0, int* maxIdx = 0);
862
863 /** @brief Reduces a matrix to a vector.
864
865 The function #reduce reduces the matrix to a vector by treating the matrix rows/columns as a set of
866 1D vectors and performing the specified operation on the vectors until a single row/column is
867 obtained. For example, the function can be used to compute horizontal and vertical projections of a
868 raster image. In case of #REDUCE_MAX and #REDUCE_MIN , the output image should have the same type as the source one.
869 In case of #REDUCE_SUM and #REDUCE_AVG , the output may have a larger element bit-depth to preserve accuracy.
870 And multi-channel arrays are also supported in these two reduction modes.
871
872 The following code demonstrates its usage for a single channel matrix.
873 @snippet snippets/core_reduce.cpp example
874
875 And the following code demonstrates its usage for a two-channel matrix.
876 @snippet snippets/core_reduce.cpp example2
877
878 @param src input 2D matrix.
879 @param dst output vector. Its size and type is defined by dim and dtype parameters.
880 @param dim dimension index along which the matrix is reduced. 0 means that the matrix is reduced to
881 a single row. 1 means that the matrix is reduced to a single column.
882 @param rtype reduction operation that could be one of #ReduceTypes
883 @param dtype when negative, the output vector will have the same type as the input matrix,
884 otherwise, its type will be CV_MAKE_TYPE(CV_MAT_DEPTH(dtype), src.channels()).
885 @sa repeat
886 */
887 CV_EXPORTS_W void reduce(InputArray src, OutputArray dst, int dim, int rtype, int dtype = -1);
888
889 /** @brief Creates one multi-channel array out of several single-channel ones.
890
891 The function cv::merge merges several arrays to make a single multi-channel array. That is, each
892 element of the output array will be a concatenation of the elements of the input arrays, where
893 elements of i-th input array are treated as mv[i].channels()-element vectors.
894
895 The function cv::split does the reverse operation. If you need to shuffle channels in some other
896 advanced way, use cv::mixChannels.
897
898 The following example shows how to merge 3 single channel matrices into a single 3-channel matrix.
899 @snippet snippets/core_merge.cpp example
900
901 @param mv input array of matrices to be merged; all the matrices in mv must have the same
902 size and the same depth.
903 @param count number of input matrices when mv is a plain C array; it must be greater than zero.
904 @param dst output array of the same size and the same depth as mv[0]; The number of channels will
905 be equal to the parameter count.
906 @sa  mixChannels, split, Mat::reshape
907 */
908 CV_EXPORTS void merge(const Mat* mv, size_t count, OutputArray dst);
909
910 /** @overload
911 @param mv input vector of matrices to be merged; all the matrices in mv must have the same
912 size and the same depth.
913 @param dst output array of the same size and the same depth as mv[0]; The number of channels will
914 be the total number of channels in the matrix array.
915   */
916 CV_EXPORTS_W void merge(InputArrayOfArrays mv, OutputArray dst);
917
918 /** @brief Divides a multi-channel array into several single-channel arrays.
919
920 The function cv::split splits a multi-channel array into separate single-channel arrays:
921 \f[\texttt{mv} [c](I) =  \texttt{src} (I)_c\f]
922 If you need to extract a single channel or do some other sophisticated channel permutation, use
923 mixChannels .
924
925 The following example demonstrates how to split a 3-channel matrix into 3 single channel matrices.
926 @snippet snippets/core_split.cpp example
927
928 @param src input multi-channel array.
929 @param mvbegin output array; the number of arrays must match src.channels(); the arrays themselves are
930 reallocated, if needed.
931 @sa merge, mixChannels, cvtColor
932 */
933 CV_EXPORTS void split(const Mat& src, Mat* mvbegin);
934
935 /** @overload
936 @param m input multi-channel array.
937 @param mv output vector of arrays; the arrays themselves are reallocated, if needed.
938 */
939 CV_EXPORTS_W void split(InputArray m, OutputArrayOfArrays mv);
940
941 /** @brief Copies specified channels from input arrays to the specified channels of
942 output arrays.
943
944 The function cv::mixChannels provides an advanced mechanism for shuffling image channels.
945
946 cv::split,cv::merge,cv::extractChannel,cv::insertChannel and some forms of cv::cvtColor are partial cases of cv::mixChannels.
947
948 In the example below, the code splits a 4-channel BGRA image into a 3-channel BGR (with B and R
949 channels swapped) and a separate alpha-channel image:
950 @code{.cpp}
951     Mat bgra( 100, 100, CV_8UC4, Scalar(255,0,0,255) );
952     Mat bgr( bgra.rows, bgra.cols, CV_8UC3 );
953     Mat alpha( bgra.rows, bgra.cols, CV_8UC1 );
954
955     // forming an array of matrices is a quite efficient operation,
956     // because the matrix data is not copied, only the headers
957     Mat out[] = { bgr, alpha };
958     // bgra[0] -> bgr[2], bgra[1] -> bgr[1],
959     // bgra[2] -> bgr[0], bgra[3] -> alpha[0]
960     int from_to[] = { 0,2, 1,1, 2,0, 3,3 };
961     mixChannels( &bgra, 1, out, 2, from_to, 4 );
962 @endcode
963 @note Unlike many other new-style C++ functions in OpenCV (see the introduction section and
964 Mat::create ), cv::mixChannels requires the output arrays to be pre-allocated before calling the
965 function.
966 @param src input array or vector of matrices; all of the matrices must have the same size and the
967 same depth.
968 @param nsrcs number of matrices in `src`.
969 @param dst output array or vector of matrices; all the matrices **must be allocated**; their size and
970 depth must be the same as in `src[0]`.
971 @param ndsts number of matrices in `dst`.
972 @param fromTo array of index pairs specifying which channels are copied and where; fromTo[k\*2] is
973 a 0-based index of the input channel in src, fromTo[k\*2+1] is an index of the output channel in
974 dst; the continuous channel numbering is used: the first input image channels are indexed from 0 to
975 src[0].channels()-1, the second input image channels are indexed from src[0].channels() to
976 src[0].channels() + src[1].channels()-1, and so on, the same scheme is used for the output image
977 channels; as a special case, when fromTo[k\*2] is negative, the corresponding output channel is
978 filled with zero .
979 @param npairs number of index pairs in `fromTo`.
980 @sa split, merge, extractChannel, insertChannel, cvtColor
981 */
982 CV_EXPORTS void mixChannels(const Mat* src, size_t nsrcs, Mat* dst, size_t ndsts,
983                             const int* fromTo, size_t npairs);
984
985 /** @overload
986 @param src input array or vector of matrices; all of the matrices must have the same size and the
987 same depth.
988 @param dst output array or vector of matrices; all the matrices **must be allocated**; their size and
989 depth must be the same as in src[0].
990 @param fromTo array of index pairs specifying which channels are copied and where; fromTo[k\*2] is
991 a 0-based index of the input channel in src, fromTo[k\*2+1] is an index of the output channel in
992 dst; the continuous channel numbering is used: the first input image channels are indexed from 0 to
993 src[0].channels()-1, the second input image channels are indexed from src[0].channels() to
994 src[0].channels() + src[1].channels()-1, and so on, the same scheme is used for the output image
995 channels; as a special case, when fromTo[k\*2] is negative, the corresponding output channel is
996 filled with zero .
997 @param npairs number of index pairs in fromTo.
998 */
999 CV_EXPORTS void mixChannels(InputArrayOfArrays src, InputOutputArrayOfArrays dst,
1000                             const int* fromTo, size_t npairs);
1001
1002 /** @overload
1003 @param src input array or vector of matrices; all of the matrices must have the same size and the
1004 same depth.
1005 @param dst output array or vector of matrices; all the matrices **must be allocated**; their size and
1006 depth must be the same as in src[0].
1007 @param fromTo array of index pairs specifying which channels are copied and where; fromTo[k\*2] is
1008 a 0-based index of the input channel in src, fromTo[k\*2+1] is an index of the output channel in
1009 dst; the continuous channel numbering is used: the first input image channels are indexed from 0 to
1010 src[0].channels()-1, the second input image channels are indexed from src[0].channels() to
1011 src[0].channels() + src[1].channels()-1, and so on, the same scheme is used for the output image
1012 channels; as a special case, when fromTo[k\*2] is negative, the corresponding output channel is
1013 filled with zero .
1014 */
1015 CV_EXPORTS_W void mixChannels(InputArrayOfArrays src, InputOutputArrayOfArrays dst,
1016                               const std::vector<int>& fromTo);
1017
1018 /** @brief Extracts a single channel from src (coi is 0-based index)
1019 @param src input array
1020 @param dst output array
1021 @param coi index of channel to extract
1022 @sa mixChannels, split
1023 */
1024 CV_EXPORTS_W void extractChannel(InputArray src, OutputArray dst, int coi);
1025
1026 /** @brief Inserts a single channel to dst (coi is 0-based index)
1027 @param src input array
1028 @param dst output array
1029 @param coi index of channel for insertion
1030 @sa mixChannels, merge
1031 */
1032 CV_EXPORTS_W void insertChannel(InputArray src, InputOutputArray dst, int coi);
1033
1034 /** @brief Flips a 2D array around vertical, horizontal, or both axes.
1035
1036 The function cv::flip flips the array in one of three different ways (row
1037 and column indices are 0-based):
1038 \f[\texttt{dst} _{ij} =
1039 \left\{
1040 \begin{array}{l l}
1041 \texttt{src} _{\texttt{src.rows}-i-1,j} & if\;  \texttt{flipCode} = 0 \\
1042 \texttt{src} _{i, \texttt{src.cols} -j-1} & if\;  \texttt{flipCode} > 0 \\
1043 \texttt{src} _{ \texttt{src.rows} -i-1, \texttt{src.cols} -j-1} & if\; \texttt{flipCode} < 0 \\
1044 \end{array}
1045 \right.\f]
1046 The example scenarios of using the function are the following:
1047 *   Vertical flipping of the image (flipCode == 0) to switch between
1048     top-left and bottom-left image origin. This is a typical operation
1049     in video processing on Microsoft Windows\* OS.
1050 *   Horizontal flipping of the image with the subsequent horizontal
1051     shift and absolute difference calculation to check for a
1052     vertical-axis symmetry (flipCode \> 0).
1053 *   Simultaneous horizontal and vertical flipping of the image with
1054     the subsequent shift and absolute difference calculation to check
1055     for a central symmetry (flipCode \< 0).
1056 *   Reversing the order of point arrays (flipCode \> 0 or
1057     flipCode == 0).
1058 @param src input array.
1059 @param dst output array of the same size and type as src.
1060 @param flipCode a flag to specify how to flip the array; 0 means
1061 flipping around the x-axis and positive value (for example, 1) means
1062 flipping around y-axis. Negative value (for example, -1) means flipping
1063 around both axes.
1064 @sa transpose , repeat , completeSymm
1065 */
1066 CV_EXPORTS_W void flip(InputArray src, OutputArray dst, int flipCode);
1067
1068 enum RotateFlags {
1069     ROTATE_90_CLOCKWISE = 0, //!<Rotate 90 degrees clockwise
1070     ROTATE_180 = 1, //!<Rotate 180 degrees clockwise
1071     ROTATE_90_COUNTERCLOCKWISE = 2, //!<Rotate 270 degrees clockwise
1072 };
1073 /** @brief Rotates a 2D array in multiples of 90 degrees.
1074 The function cv::rotate rotates the array in one of three different ways:
1075 *   Rotate by 90 degrees clockwise (rotateCode = ROTATE_90_CLOCKWISE).
1076 *   Rotate by 180 degrees clockwise (rotateCode = ROTATE_180).
1077 *   Rotate by 270 degrees clockwise (rotateCode = ROTATE_90_COUNTERCLOCKWISE).
1078 @param src input array.
1079 @param dst output array of the same type as src.  The size is the same with ROTATE_180,
1080 and the rows and cols are switched for ROTATE_90_CLOCKWISE and ROTATE_90_COUNTERCLOCKWISE.
1081 @param rotateCode an enum to specify how to rotate the array; see the enum #RotateFlags
1082 @sa transpose , repeat , completeSymm, flip, RotateFlags
1083 */
1084 CV_EXPORTS_W void rotate(InputArray src, OutputArray dst, int rotateCode);
1085
1086 /** @brief Fills the output array with repeated copies of the input array.
1087
1088 The function cv::repeat duplicates the input array one or more times along each of the two axes:
1089 \f[\texttt{dst} _{ij}= \texttt{src} _{i\mod src.rows, \; j\mod src.cols }\f]
1090 The second variant of the function is more convenient to use with @ref MatrixExpressions.
1091 @param src input array to replicate.
1092 @param ny Flag to specify how many times the `src` is repeated along the
1093 vertical axis.
1094 @param nx Flag to specify how many times the `src` is repeated along the
1095 horizontal axis.
1096 @param dst output array of the same type as `src`.
1097 @sa cv::reduce
1098 */
1099 CV_EXPORTS_W void repeat(InputArray src, int ny, int nx, OutputArray dst);
1100
1101 /** @overload
1102 @param src input array to replicate.
1103 @param ny Flag to specify how many times the `src` is repeated along the
1104 vertical axis.
1105 @param nx Flag to specify how many times the `src` is repeated along the
1106 horizontal axis.
1107   */
1108 CV_EXPORTS Mat repeat(const Mat& src, int ny, int nx);
1109
1110 /** @brief Applies horizontal concatenation to given matrices.
1111
1112 The function horizontally concatenates two or more cv::Mat matrices (with the same number of rows).
1113 @code{.cpp}
1114     cv::Mat matArray[] = { cv::Mat(4, 1, CV_8UC1, cv::Scalar(1)),
1115                            cv::Mat(4, 1, CV_8UC1, cv::Scalar(2)),
1116                            cv::Mat(4, 1, CV_8UC1, cv::Scalar(3)),};
1117
1118     cv::Mat out;
1119     cv::hconcat( matArray, 3, out );
1120     //out:
1121     //[1, 2, 3;
1122     // 1, 2, 3;
1123     // 1, 2, 3;
1124     // 1, 2, 3]
1125 @endcode
1126 @param src input array or vector of matrices. all of the matrices must have the same number of rows and the same depth.
1127 @param nsrc number of matrices in src.
1128 @param dst output array. It has the same number of rows and depth as the src, and the sum of cols of the src.
1129 @sa cv::vconcat(const Mat*, size_t, OutputArray), @sa cv::vconcat(InputArrayOfArrays, OutputArray) and @sa cv::vconcat(InputArray, InputArray, OutputArray)
1130 */
1131 CV_EXPORTS void hconcat(const Mat* src, size_t nsrc, OutputArray dst);
1132 /** @overload
1133  @code{.cpp}
1134     cv::Mat_<float> A = (cv::Mat_<float>(3, 2) << 1, 4,
1135                                                   2, 5,
1136                                                   3, 6);
1137     cv::Mat_<float> B = (cv::Mat_<float>(3, 2) << 7, 10,
1138                                                   8, 11,
1139                                                   9, 12);
1140
1141     cv::Mat C;
1142     cv::hconcat(A, B, C);
1143     //C:
1144     //[1, 4, 7, 10;
1145     // 2, 5, 8, 11;
1146     // 3, 6, 9, 12]
1147  @endcode
1148  @param src1 first input array to be considered for horizontal concatenation.
1149  @param src2 second input array to be considered for horizontal concatenation.
1150  @param dst output array. It has the same number of rows and depth as the src1 and src2, and the sum of cols of the src1 and src2.
1151  */
1152 CV_EXPORTS void hconcat(InputArray src1, InputArray src2, OutputArray dst);
1153 /** @overload
1154  @code{.cpp}
1155     std::vector<cv::Mat> matrices = { cv::Mat(4, 1, CV_8UC1, cv::Scalar(1)),
1156                                       cv::Mat(4, 1, CV_8UC1, cv::Scalar(2)),
1157                                       cv::Mat(4, 1, CV_8UC1, cv::Scalar(3)),};
1158
1159     cv::Mat out;
1160     cv::hconcat( matrices, out );
1161     //out:
1162     //[1, 2, 3;
1163     // 1, 2, 3;
1164     // 1, 2, 3;
1165     // 1, 2, 3]
1166  @endcode
1167  @param src input array or vector of matrices. all of the matrices must have the same number of rows and the same depth.
1168  @param dst output array. It has the same number of rows and depth as the src, and the sum of cols of the src.
1169 same depth.
1170  */
1171 CV_EXPORTS_W void hconcat(InputArrayOfArrays src, OutputArray dst);
1172
1173 /** @brief Applies vertical concatenation to given matrices.
1174
1175 The function vertically concatenates two or more cv::Mat matrices (with the same number of cols).
1176 @code{.cpp}
1177     cv::Mat matArray[] = { cv::Mat(1, 4, CV_8UC1, cv::Scalar(1)),
1178                            cv::Mat(1, 4, CV_8UC1, cv::Scalar(2)),
1179                            cv::Mat(1, 4, CV_8UC1, cv::Scalar(3)),};
1180
1181     cv::Mat out;
1182     cv::vconcat( matArray, 3, out );
1183     //out:
1184     //[1,   1,   1,   1;
1185     // 2,   2,   2,   2;
1186     // 3,   3,   3,   3]
1187 @endcode
1188 @param src input array or vector of matrices. all of the matrices must have the same number of cols and the same depth.
1189 @param nsrc number of matrices in src.
1190 @param dst output array. It has the same number of cols and depth as the src, and the sum of rows of the src.
1191 @sa cv::hconcat(const Mat*, size_t, OutputArray), @sa cv::hconcat(InputArrayOfArrays, OutputArray) and @sa cv::hconcat(InputArray, InputArray, OutputArray)
1192 */
1193 CV_EXPORTS void vconcat(const Mat* src, size_t nsrc, OutputArray dst);
1194 /** @overload
1195  @code{.cpp}
1196     cv::Mat_<float> A = (cv::Mat_<float>(3, 2) << 1, 7,
1197                                                   2, 8,
1198                                                   3, 9);
1199     cv::Mat_<float> B = (cv::Mat_<float>(3, 2) << 4, 10,
1200                                                   5, 11,
1201                                                   6, 12);
1202
1203     cv::Mat C;
1204     cv::vconcat(A, B, C);
1205     //C:
1206     //[1, 7;
1207     // 2, 8;
1208     // 3, 9;
1209     // 4, 10;
1210     // 5, 11;
1211     // 6, 12]
1212  @endcode
1213  @param src1 first input array to be considered for vertical concatenation.
1214  @param src2 second input array to be considered for vertical concatenation.
1215  @param dst output array. It has the same number of cols and depth as the src1 and src2, and the sum of rows of the src1 and src2.
1216  */
1217 CV_EXPORTS void vconcat(InputArray src1, InputArray src2, OutputArray dst);
1218 /** @overload
1219  @code{.cpp}
1220     std::vector<cv::Mat> matrices = { cv::Mat(1, 4, CV_8UC1, cv::Scalar(1)),
1221                                       cv::Mat(1, 4, CV_8UC1, cv::Scalar(2)),
1222                                       cv::Mat(1, 4, CV_8UC1, cv::Scalar(3)),};
1223
1224     cv::Mat out;
1225     cv::vconcat( matrices, out );
1226     //out:
1227     //[1,   1,   1,   1;
1228     // 2,   2,   2,   2;
1229     // 3,   3,   3,   3]
1230  @endcode
1231  @param src input array or vector of matrices. all of the matrices must have the same number of cols and the same depth
1232  @param dst output array. It has the same number of cols and depth as the src, and the sum of rows of the src.
1233 same depth.
1234  */
1235 CV_EXPORTS_W void vconcat(InputArrayOfArrays src, OutputArray dst);
1236
1237 /** @brief computes bitwise conjunction of the two arrays (dst = src1 & src2)
1238 Calculates the per-element bit-wise conjunction of two arrays or an
1239 array and a scalar.
1240
1241 The function cv::bitwise_and calculates the per-element bit-wise logical conjunction for:
1242 *   Two arrays when src1 and src2 have the same size:
1243     \f[\texttt{dst} (I) =  \texttt{src1} (I)  \wedge \texttt{src2} (I) \quad \texttt{if mask} (I) \ne0\f]
1244 *   An array and a scalar when src2 is constructed from Scalar or has
1245     the same number of elements as `src1.channels()`:
1246     \f[\texttt{dst} (I) =  \texttt{src1} (I)  \wedge \texttt{src2} \quad \texttt{if mask} (I) \ne0\f]
1247 *   A scalar and an array when src1 is constructed from Scalar or has
1248     the same number of elements as `src2.channels()`:
1249     \f[\texttt{dst} (I) =  \texttt{src1}  \wedge \texttt{src2} (I) \quad \texttt{if mask} (I) \ne0\f]
1250 In case of floating-point arrays, their machine-specific bit
1251 representations (usually IEEE754-compliant) are used for the operation.
1252 In case of multi-channel arrays, each channel is processed
1253 independently. In the second and third cases above, the scalar is first
1254 converted to the array type.
1255 @param src1 first input array or a scalar.
1256 @param src2 second input array or a scalar.
1257 @param dst output array that has the same size and type as the input
1258 arrays.
1259 @param mask optional operation mask, 8-bit single channel array, that
1260 specifies elements of the output array to be changed.
1261 */
1262 CV_EXPORTS_W void bitwise_and(InputArray src1, InputArray src2,
1263                               OutputArray dst, InputArray mask = noArray());
1264
1265 /** @brief Calculates the per-element bit-wise disjunction of two arrays or an
1266 array and a scalar.
1267
1268 The function cv::bitwise_or calculates the per-element bit-wise logical disjunction for:
1269 *   Two arrays when src1 and src2 have the same size:
1270     \f[\texttt{dst} (I) =  \texttt{src1} (I)  \vee \texttt{src2} (I) \quad \texttt{if mask} (I) \ne0\f]
1271 *   An array and a scalar when src2 is constructed from Scalar or has
1272     the same number of elements as `src1.channels()`:
1273     \f[\texttt{dst} (I) =  \texttt{src1} (I)  \vee \texttt{src2} \quad \texttt{if mask} (I) \ne0\f]
1274 *   A scalar and an array when src1 is constructed from Scalar or has
1275     the same number of elements as `src2.channels()`:
1276     \f[\texttt{dst} (I) =  \texttt{src1}  \vee \texttt{src2} (I) \quad \texttt{if mask} (I) \ne0\f]
1277 In case of floating-point arrays, their machine-specific bit
1278 representations (usually IEEE754-compliant) are used for the operation.
1279 In case of multi-channel arrays, each channel is processed
1280 independently. In the second and third cases above, the scalar is first
1281 converted to the array type.
1282 @param src1 first input array or a scalar.
1283 @param src2 second input array or a scalar.
1284 @param dst output array that has the same size and type as the input
1285 arrays.
1286 @param mask optional operation mask, 8-bit single channel array, that
1287 specifies elements of the output array to be changed.
1288 */
1289 CV_EXPORTS_W void bitwise_or(InputArray src1, InputArray src2,
1290                              OutputArray dst, InputArray mask = noArray());
1291
1292 /** @brief Calculates the per-element bit-wise "exclusive or" operation on two
1293 arrays or an array and a scalar.
1294
1295 The function cv::bitwise_xor calculates the per-element bit-wise logical "exclusive-or"
1296 operation for:
1297 *   Two arrays when src1 and src2 have the same size:
1298     \f[\texttt{dst} (I) =  \texttt{src1} (I)  \oplus \texttt{src2} (I) \quad \texttt{if mask} (I) \ne0\f]
1299 *   An array and a scalar when src2 is constructed from Scalar or has
1300     the same number of elements as `src1.channels()`:
1301     \f[\texttt{dst} (I) =  \texttt{src1} (I)  \oplus \texttt{src2} \quad \texttt{if mask} (I) \ne0\f]
1302 *   A scalar and an array when src1 is constructed from Scalar or has
1303     the same number of elements as `src2.channels()`:
1304     \f[\texttt{dst} (I) =  \texttt{src1}  \oplus \texttt{src2} (I) \quad \texttt{if mask} (I) \ne0\f]
1305 In case of floating-point arrays, their machine-specific bit
1306 representations (usually IEEE754-compliant) are used for the operation.
1307 In case of multi-channel arrays, each channel is processed
1308 independently. In the 2nd and 3rd cases above, the scalar is first
1309 converted to the array type.
1310 @param src1 first input array or a scalar.
1311 @param src2 second input array or a scalar.
1312 @param dst output array that has the same size and type as the input
1313 arrays.
1314 @param mask optional operation mask, 8-bit single channel array, that
1315 specifies elements of the output array to be changed.
1316 */
1317 CV_EXPORTS_W void bitwise_xor(InputArray src1, InputArray src2,
1318                               OutputArray dst, InputArray mask = noArray());
1319
1320 /** @brief  Inverts every bit of an array.
1321
1322 The function cv::bitwise_not calculates per-element bit-wise inversion of the input
1323 array:
1324 \f[\texttt{dst} (I) =  \neg \texttt{src} (I)\f]
1325 In case of a floating-point input array, its machine-specific bit
1326 representation (usually IEEE754-compliant) is used for the operation. In
1327 case of multi-channel arrays, each channel is processed independently.
1328 @param src input array.
1329 @param dst output array that has the same size and type as the input
1330 array.
1331 @param mask optional operation mask, 8-bit single channel array, that
1332 specifies elements of the output array to be changed.
1333 */
1334 CV_EXPORTS_W void bitwise_not(InputArray src, OutputArray dst,
1335                               InputArray mask = noArray());
1336
1337 /** @brief Calculates the per-element absolute difference between two arrays or between an array and a scalar.
1338
1339 The function cv::absdiff calculates:
1340 *   Absolute difference between two arrays when they have the same
1341     size and type:
1342     \f[\texttt{dst}(I) =  \texttt{saturate} (| \texttt{src1}(I) -  \texttt{src2}(I)|)\f]
1343 *   Absolute difference between an array and a scalar when the second
1344     array is constructed from Scalar or has as many elements as the
1345     number of channels in `src1`:
1346     \f[\texttt{dst}(I) =  \texttt{saturate} (| \texttt{src1}(I) -  \texttt{src2} |)\f]
1347 *   Absolute difference between a scalar and an array when the first
1348     array is constructed from Scalar or has as many elements as the
1349     number of channels in `src2`:
1350     \f[\texttt{dst}(I) =  \texttt{saturate} (| \texttt{src1} -  \texttt{src2}(I) |)\f]
1351     where I is a multi-dimensional index of array elements. In case of
1352     multi-channel arrays, each channel is processed independently.
1353 @note Saturation is not applied when the arrays have the depth CV_32S.
1354 You may even get a negative value in the case of overflow.
1355 @param src1 first input array or a scalar.
1356 @param src2 second input array or a scalar.
1357 @param dst output array that has the same size and type as input arrays.
1358 @sa cv::abs(const Mat&)
1359 */
1360 CV_EXPORTS_W void absdiff(InputArray src1, InputArray src2, OutputArray dst);
1361
1362 /** @brief  Checks if array elements lie between the elements of two other arrays.
1363
1364 The function checks the range as follows:
1365 -   For every element of a single-channel input array:
1366     \f[\texttt{dst} (I)= \texttt{lowerb} (I)_0  \leq \texttt{src} (I)_0 \leq  \texttt{upperb} (I)_0\f]
1367 -   For two-channel arrays:
1368     \f[\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\f]
1369 -   and so forth.
1370
1371 That is, dst (I) is set to 255 (all 1 -bits) if src (I) is within the
1372 specified 1D, 2D, 3D, ... box and 0 otherwise.
1373
1374 When the lower and/or upper boundary parameters are scalars, the indexes
1375 (I) at lowerb and upperb in the above formulas should be omitted.
1376 @param src first input array.
1377 @param lowerb inclusive lower boundary array or a scalar.
1378 @param upperb inclusive upper boundary array or a scalar.
1379 @param dst output array of the same size as src and CV_8U type.
1380 */
1381 CV_EXPORTS_W void inRange(InputArray src, InputArray lowerb,
1382                           InputArray upperb, OutputArray dst);
1383
1384 /** @brief Performs the per-element comparison of two arrays or an array and scalar value.
1385
1386 The function compares:
1387 *   Elements of two arrays when src1 and src2 have the same size:
1388     \f[\texttt{dst} (I) =  \texttt{src1} (I)  \,\texttt{cmpop}\, \texttt{src2} (I)\f]
1389 *   Elements of src1 with a scalar src2 when src2 is constructed from
1390     Scalar or has a single element:
1391     \f[\texttt{dst} (I) =  \texttt{src1}(I) \,\texttt{cmpop}\,  \texttt{src2}\f]
1392 *   src1 with elements of src2 when src1 is constructed from Scalar or
1393     has a single element:
1394     \f[\texttt{dst} (I) =  \texttt{src1}  \,\texttt{cmpop}\, \texttt{src2} (I)\f]
1395 When the comparison result is true, the corresponding element of output
1396 array is set to 255. The comparison operations can be replaced with the
1397 equivalent matrix expressions:
1398 @code{.cpp}
1399     Mat dst1 = src1 >= src2;
1400     Mat dst2 = src1 < 8;
1401     ...
1402 @endcode
1403 @param src1 first input array or a scalar; when it is an array, it must have a single channel.
1404 @param src2 second input array or a scalar; when it is an array, it must have a single channel.
1405 @param dst output array of type ref CV_8U that has the same size and the same number of channels as
1406     the input arrays.
1407 @param cmpop a flag, that specifies correspondence between the arrays (cv::CmpTypes)
1408 @sa checkRange, min, max, threshold
1409 */
1410 CV_EXPORTS_W void compare(InputArray src1, InputArray src2, OutputArray dst, int cmpop);
1411
1412 /** @brief Calculates per-element minimum of two arrays or an array and a scalar.
1413
1414 The function cv::min calculates the per-element minimum of two arrays:
1415 \f[\texttt{dst} (I)= \min ( \texttt{src1} (I), \texttt{src2} (I))\f]
1416 or array and a scalar:
1417 \f[\texttt{dst} (I)= \min ( \texttt{src1} (I), \texttt{value} )\f]
1418 @param src1 first input array.
1419 @param src2 second input array of the same size and type as src1.
1420 @param dst output array of the same size and type as src1.
1421 @sa max, compare, inRange, minMaxLoc
1422 */
1423 CV_EXPORTS_W void min(InputArray src1, InputArray src2, OutputArray dst);
1424 /** @overload
1425 needed to avoid conflicts with const _Tp& std::min(const _Tp&, const _Tp&, _Compare)
1426 */
1427 CV_EXPORTS void min(const Mat& src1, const Mat& src2, Mat& dst);
1428 /** @overload
1429 needed to avoid conflicts with const _Tp& std::min(const _Tp&, const _Tp&, _Compare)
1430 */
1431 CV_EXPORTS void min(const UMat& src1, const UMat& src2, UMat& dst);
1432
1433 /** @brief Calculates per-element maximum of two arrays or an array and a scalar.
1434
1435 The function cv::max calculates the per-element maximum of two arrays:
1436 \f[\texttt{dst} (I)= \max ( \texttt{src1} (I), \texttt{src2} (I))\f]
1437 or array and a scalar:
1438 \f[\texttt{dst} (I)= \max ( \texttt{src1} (I), \texttt{value} )\f]
1439 @param src1 first input array.
1440 @param src2 second input array of the same size and type as src1 .
1441 @param dst output array of the same size and type as src1.
1442 @sa  min, compare, inRange, minMaxLoc, @ref MatrixExpressions
1443 */
1444 CV_EXPORTS_W void max(InputArray src1, InputArray src2, OutputArray dst);
1445 /** @overload
1446 needed to avoid conflicts with const _Tp& std::min(const _Tp&, const _Tp&, _Compare)
1447 */
1448 CV_EXPORTS void max(const Mat& src1, const Mat& src2, Mat& dst);
1449 /** @overload
1450 needed to avoid conflicts with const _Tp& std::min(const _Tp&, const _Tp&, _Compare)
1451 */
1452 CV_EXPORTS void max(const UMat& src1, const UMat& src2, UMat& dst);
1453
1454 /** @brief Calculates a square root of array elements.
1455
1456 The function cv::sqrt calculates a square root of each input array element.
1457 In case of multi-channel arrays, each channel is processed
1458 independently. The accuracy is approximately the same as of the built-in
1459 std::sqrt .
1460 @param src input floating-point array.
1461 @param dst output array of the same size and type as src.
1462 */
1463 CV_EXPORTS_W void sqrt(InputArray src, OutputArray dst);
1464
1465 /** @brief Raises every array element to a power.
1466
1467 The function cv::pow raises every element of the input array to power :
1468 \f[\texttt{dst} (I) =  \fork{\texttt{src}(I)^{power}}{if \(\texttt{power}\) is integer}{|\texttt{src}(I)|^{power}}{otherwise}\f]
1469
1470 So, for a non-integer power exponent, the absolute values of input array
1471 elements are used. However, it is possible to get true values for
1472 negative values using some extra operations. In the example below,
1473 computing the 5th root of array src shows:
1474 @code{.cpp}
1475     Mat mask = src < 0;
1476     pow(src, 1./5, dst);
1477     subtract(Scalar::all(0), dst, dst, mask);
1478 @endcode
1479 For some values of power, such as integer values, 0.5 and -0.5,
1480 specialized faster algorithms are used.
1481
1482 Special values (NaN, Inf) are not handled.
1483 @param src input array.
1484 @param power exponent of power.
1485 @param dst output array of the same size and type as src.
1486 @sa sqrt, exp, log, cartToPolar, polarToCart
1487 */
1488 CV_EXPORTS_W void pow(InputArray src, double power, OutputArray dst);
1489
1490 /** @brief Calculates the exponent of every array element.
1491
1492 The function cv::exp calculates the exponent of every element of the input
1493 array:
1494 \f[\texttt{dst} [I] = e^{ src(I) }\f]
1495
1496 The maximum relative error is about 7e-6 for single-precision input and
1497 less than 1e-10 for double-precision input. Currently, the function
1498 converts denormalized values to zeros on output. Special values (NaN,
1499 Inf) are not handled.
1500 @param src input array.
1501 @param dst output array of the same size and type as src.
1502 @sa log , cartToPolar , polarToCart , phase , pow , sqrt , magnitude
1503 */
1504 CV_EXPORTS_W void exp(InputArray src, OutputArray dst);
1505
1506 /** @brief Calculates the natural logarithm of every array element.
1507
1508 The function cv::log calculates the natural logarithm of every element of the input array:
1509 \f[\texttt{dst} (I) =  \log (\texttt{src}(I)) \f]
1510
1511 Output on zero, negative and special (NaN, Inf) values is undefined.
1512
1513 @param src input array.
1514 @param dst output array of the same size and type as src .
1515 @sa exp, cartToPolar, polarToCart, phase, pow, sqrt, magnitude
1516 */
1517 CV_EXPORTS_W void log(InputArray src, OutputArray dst);
1518
1519 /** @brief Calculates x and y coordinates of 2D vectors from their magnitude and angle.
1520
1521 The function cv::polarToCart calculates the Cartesian coordinates of each 2D
1522 vector represented by the corresponding elements of magnitude and angle:
1523 \f[\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}\f]
1524
1525 The relative accuracy of the estimated coordinates is about 1e-6.
1526 @param magnitude input floating-point array of magnitudes of 2D vectors;
1527 it can be an empty matrix (=Mat()), in this case, the function assumes
1528 that all the magnitudes are =1; if it is not empty, it must have the
1529 same size and type as angle.
1530 @param angle input floating-point array of angles of 2D vectors.
1531 @param x output array of x-coordinates of 2D vectors; it has the same
1532 size and type as angle.
1533 @param y output array of y-coordinates of 2D vectors; it has the same
1534 size and type as angle.
1535 @param angleInDegrees when true, the input angles are measured in
1536 degrees, otherwise, they are measured in radians.
1537 @sa cartToPolar, magnitude, phase, exp, log, pow, sqrt
1538 */
1539 CV_EXPORTS_W void polarToCart(InputArray magnitude, InputArray angle,
1540                               OutputArray x, OutputArray y, bool angleInDegrees = false);
1541
1542 /** @brief Calculates the magnitude and angle of 2D vectors.
1543
1544 The function cv::cartToPolar calculates either the magnitude, angle, or both
1545 for every 2D vector (x(I),y(I)):
1546 \f[\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}\f]
1547
1548 The angles are calculated with accuracy about 0.3 degrees. For the point
1549 (0,0), the angle is set to 0.
1550 @param x array of x-coordinates; this must be a single-precision or
1551 double-precision floating-point array.
1552 @param y array of y-coordinates, that must have the same size and same type as x.
1553 @param magnitude output array of magnitudes of the same size and type as x.
1554 @param angle output array of angles that has the same size and type as
1555 x; the angles are measured in radians (from 0 to 2\*Pi) or in degrees (0 to 360 degrees).
1556 @param angleInDegrees a flag, indicating whether the angles are measured
1557 in radians (which is by default), or in degrees.
1558 @sa Sobel, Scharr
1559 */
1560 CV_EXPORTS_W void cartToPolar(InputArray x, InputArray y,
1561                               OutputArray magnitude, OutputArray angle,
1562                               bool angleInDegrees = false);
1563
1564 /** @brief Calculates the rotation angle of 2D vectors.
1565
1566 The function cv::phase calculates the rotation angle of each 2D vector that
1567 is formed from the corresponding elements of x and y :
1568 \f[\texttt{angle} (I) =  \texttt{atan2} ( \texttt{y} (I), \texttt{x} (I))\f]
1569
1570 The angle estimation accuracy is about 0.3 degrees. When x(I)=y(I)=0 ,
1571 the corresponding angle(I) is set to 0.
1572 @param x input floating-point array of x-coordinates of 2D vectors.
1573 @param y input array of y-coordinates of 2D vectors; it must have the
1574 same size and the same type as x.
1575 @param angle output array of vector angles; it has the same size and
1576 same type as x .
1577 @param angleInDegrees when true, the function calculates the angle in
1578 degrees, otherwise, they are measured in radians.
1579 */
1580 CV_EXPORTS_W void phase(InputArray x, InputArray y, OutputArray angle,
1581                         bool angleInDegrees = false);
1582
1583 /** @brief Calculates the magnitude of 2D vectors.
1584
1585 The function cv::magnitude calculates the magnitude of 2D vectors formed
1586 from the corresponding elements of x and y arrays:
1587 \f[\texttt{dst} (I) =  \sqrt{\texttt{x}(I)^2 + \texttt{y}(I)^2}\f]
1588 @param x floating-point array of x-coordinates of the vectors.
1589 @param y floating-point array of y-coordinates of the vectors; it must
1590 have the same size as x.
1591 @param magnitude output array of the same size and type as x.
1592 @sa cartToPolar, polarToCart, phase, sqrt
1593 */
1594 CV_EXPORTS_W void magnitude(InputArray x, InputArray y, OutputArray magnitude);
1595
1596 /** @brief Checks every element of an input array for invalid values.
1597
1598 The function cv::checkRange checks that every array element is neither NaN nor infinite. When minVal \>
1599 -DBL_MAX and maxVal \< DBL_MAX, the function also checks that each value is between minVal and
1600 maxVal. In case of multi-channel arrays, each channel is processed independently. If some values
1601 are out of range, position of the first outlier is stored in pos (when pos != NULL). Then, the
1602 function either returns false (when quiet=true) or throws an exception.
1603 @param a input array.
1604 @param quiet a flag, indicating whether the functions quietly return false when the array elements
1605 are out of range or they throw an exception.
1606 @param pos optional output parameter, when not NULL, must be a pointer to array of src.dims
1607 elements.
1608 @param minVal inclusive lower boundary of valid values range.
1609 @param maxVal exclusive upper boundary of valid values range.
1610 */
1611 CV_EXPORTS_W bool checkRange(InputArray a, bool quiet = true, CV_OUT Point* pos = 0,
1612                             double minVal = -DBL_MAX, double maxVal = DBL_MAX);
1613
1614 /** @brief converts NaN's to the given number
1615 */
1616 CV_EXPORTS_W void patchNaNs(InputOutputArray a, double val = 0);
1617
1618 /** @brief Performs generalized matrix multiplication.
1619
1620 The function cv::gemm performs generalized matrix multiplication similar to the
1621 gemm functions in BLAS level 3. For example,
1622 `gemm(src1, src2, alpha, src3, beta, dst, GEMM_1_T + GEMM_3_T)`
1623 corresponds to
1624 \f[\texttt{dst} =  \texttt{alpha} \cdot \texttt{src1} ^T  \cdot \texttt{src2} +  \texttt{beta} \cdot \texttt{src3} ^T\f]
1625
1626 In case of complex (two-channel) data, performed a complex matrix
1627 multiplication.
1628
1629 The function can be replaced with a matrix expression. For example, the
1630 above call can be replaced with:
1631 @code{.cpp}
1632     dst = alpha*src1.t()*src2 + beta*src3.t();
1633 @endcode
1634 @param src1 first multiplied input matrix that could be real(CV_32FC1,
1635 CV_64FC1) or complex(CV_32FC2, CV_64FC2).
1636 @param src2 second multiplied input matrix of the same type as src1.
1637 @param alpha weight of the matrix product.
1638 @param src3 third optional delta matrix added to the matrix product; it
1639 should have the same type as src1 and src2.
1640 @param beta weight of src3.
1641 @param dst output matrix; it has the proper size and the same type as
1642 input matrices.
1643 @param flags operation flags (cv::GemmFlags)
1644 @sa mulTransposed , transform
1645 */
1646 CV_EXPORTS_W void gemm(InputArray src1, InputArray src2, double alpha,
1647                        InputArray src3, double beta, OutputArray dst, int flags = 0);
1648
1649 /** @brief Calculates the product of a matrix and its transposition.
1650
1651 The function cv::mulTransposed calculates the product of src and its
1652 transposition:
1653 \f[\texttt{dst} = \texttt{scale} ( \texttt{src} - \texttt{delta} )^T ( \texttt{src} - \texttt{delta} )\f]
1654 if aTa=true , and
1655 \f[\texttt{dst} = \texttt{scale} ( \texttt{src} - \texttt{delta} ) ( \texttt{src} - \texttt{delta} )^T\f]
1656 otherwise. The function is used to calculate the covariance matrix. With
1657 zero delta, it can be used as a faster substitute for general matrix
1658 product A\*B when B=A'
1659 @param src input single-channel matrix. Note that unlike gemm, the
1660 function can multiply not only floating-point matrices.
1661 @param dst output square matrix.
1662 @param aTa Flag specifying the multiplication ordering. See the
1663 description below.
1664 @param delta Optional delta matrix subtracted from src before the
1665 multiplication. When the matrix is empty ( delta=noArray() ), it is
1666 assumed to be zero, that is, nothing is subtracted. If it has the same
1667 size as src , it is simply subtracted. Otherwise, it is "repeated" (see
1668 repeat ) to cover the full src and then subtracted. Type of the delta
1669 matrix, when it is not empty, must be the same as the type of created
1670 output matrix. See the dtype parameter description below.
1671 @param scale Optional scale factor for the matrix product.
1672 @param dtype Optional type of the output matrix. When it is negative,
1673 the output matrix will have the same type as src . Otherwise, it will be
1674 type=CV_MAT_DEPTH(dtype) that should be either CV_32F or CV_64F .
1675 @sa calcCovarMatrix, gemm, repeat, reduce
1676 */
1677 CV_EXPORTS_W void mulTransposed( InputArray src, OutputArray dst, bool aTa,
1678                                  InputArray delta = noArray(),
1679                                  double scale = 1, int dtype = -1 );
1680
1681 /** @brief Transposes a matrix.
1682
1683 The function cv::transpose transposes the matrix src :
1684 \f[\texttt{dst} (i,j) =  \texttt{src} (j,i)\f]
1685 @note No complex conjugation is done in case of a complex matrix. It
1686 should be done separately if needed.
1687 @param src input array.
1688 @param dst output array of the same type as src.
1689 */
1690 CV_EXPORTS_W void transpose(InputArray src, OutputArray dst);
1691
1692 /** @brief Performs the matrix transformation of every array element.
1693
1694 The function cv::transform performs the matrix transformation of every
1695 element of the array src and stores the results in dst :
1696 \f[\texttt{dst} (I) =  \texttt{m} \cdot \texttt{src} (I)\f]
1697 (when m.cols=src.channels() ), or
1698 \f[\texttt{dst} (I) =  \texttt{m} \cdot [ \texttt{src} (I); 1]\f]
1699 (when m.cols=src.channels()+1 )
1700
1701 Every element of the N -channel array src is interpreted as N -element
1702 vector that is transformed using the M x N or M x (N+1) matrix m to
1703 M-element vector - the corresponding element of the output array dst .
1704
1705 The function may be used for geometrical transformation of
1706 N -dimensional points, arbitrary linear color space transformation (such
1707 as various kinds of RGB to YUV transforms), shuffling the image
1708 channels, and so forth.
1709 @param src input array that must have as many channels (1 to 4) as
1710 m.cols or m.cols-1.
1711 @param dst output array of the same size and depth as src; it has as
1712 many channels as m.rows.
1713 @param m transformation 2x2 or 2x3 floating-point matrix.
1714 @sa perspectiveTransform, getAffineTransform, estimateAffine2D, warpAffine, warpPerspective
1715 */
1716 CV_EXPORTS_W void transform(InputArray src, OutputArray dst, InputArray m );
1717
1718 /** @brief Performs the perspective matrix transformation of vectors.
1719
1720 The function cv::perspectiveTransform transforms every element of src by
1721 treating it as a 2D or 3D vector, in the following way:
1722 \f[(x, y, z)  \rightarrow (x'/w, y'/w, z'/w)\f]
1723 where
1724 \f[(x', y', z', w') =  \texttt{mat} \cdot \begin{bmatrix} x & y & z & 1  \end{bmatrix}\f]
1725 and
1726 \f[w =  \fork{w'}{if \(w' \ne 0\)}{\infty}{otherwise}\f]
1727
1728 Here a 3D vector transformation is shown. In case of a 2D vector
1729 transformation, the z component is omitted.
1730
1731 @note The function transforms a sparse set of 2D or 3D vectors. If you
1732 want to transform an image using perspective transformation, use
1733 warpPerspective . If you have an inverse problem, that is, you want to
1734 compute the most probable perspective transformation out of several
1735 pairs of corresponding points, you can use getPerspectiveTransform or
1736 findHomography .
1737 @param src input two-channel or three-channel floating-point array; each
1738 element is a 2D/3D vector to be transformed.
1739 @param dst output array of the same size and type as src.
1740 @param m 3x3 or 4x4 floating-point transformation matrix.
1741 @sa  transform, warpPerspective, getPerspectiveTransform, findHomography
1742 */
1743 CV_EXPORTS_W void perspectiveTransform(InputArray src, OutputArray dst, InputArray m );
1744
1745 /** @brief Copies the lower or the upper half of a square matrix to its another half.
1746
1747 The function cv::completeSymm copies the lower or the upper half of a square matrix to
1748 its another half. The matrix diagonal remains unchanged:
1749  - \f$\texttt{m}_{ij}=\texttt{m}_{ji}\f$ for \f$i > j\f$ if
1750     lowerToUpper=false
1751  - \f$\texttt{m}_{ij}=\texttt{m}_{ji}\f$ for \f$i < j\f$ if
1752     lowerToUpper=true
1753
1754 @param m input-output floating-point square matrix.
1755 @param lowerToUpper operation flag; if true, the lower half is copied to
1756 the upper half. Otherwise, the upper half is copied to the lower half.
1757 @sa flip, transpose
1758 */
1759 CV_EXPORTS_W void completeSymm(InputOutputArray m, bool lowerToUpper = false);
1760
1761 /** @brief Initializes a scaled identity matrix.
1762
1763 The function cv::setIdentity initializes a scaled identity matrix:
1764 \f[\texttt{mtx} (i,j)= \fork{\texttt{value}}{ if \(i=j\)}{0}{otherwise}\f]
1765
1766 The function can also be emulated using the matrix initializers and the
1767 matrix expressions:
1768 @code
1769     Mat A = Mat::eye(4, 3, CV_32F)*5;
1770     // A will be set to [[5, 0, 0], [0, 5, 0], [0, 0, 5], [0, 0, 0]]
1771 @endcode
1772 @param mtx matrix to initialize (not necessarily square).
1773 @param s value to assign to diagonal elements.
1774 @sa Mat::zeros, Mat::ones, Mat::setTo, Mat::operator=
1775 */
1776 CV_EXPORTS_W void setIdentity(InputOutputArray mtx, const Scalar& s = Scalar(1));
1777
1778 /** @brief Returns the determinant of a square floating-point matrix.
1779
1780 The function cv::determinant calculates and returns the determinant of the
1781 specified matrix. For small matrices ( mtx.cols=mtx.rows\<=3 ), the
1782 direct method is used. For larger matrices, the function uses LU
1783 factorization with partial pivoting.
1784
1785 For symmetric positively-determined matrices, it is also possible to use
1786 eigen decomposition to calculate the determinant.
1787 @param mtx input matrix that must have CV_32FC1 or CV_64FC1 type and
1788 square size.
1789 @sa trace, invert, solve, eigen, @ref MatrixExpressions
1790 */
1791 CV_EXPORTS_W double determinant(InputArray mtx);
1792
1793 /** @brief Returns the trace of a matrix.
1794
1795 The function cv::trace returns the sum of the diagonal elements of the
1796 matrix mtx .
1797 \f[\mathrm{tr} ( \texttt{mtx} ) =  \sum _i  \texttt{mtx} (i,i)\f]
1798 @param mtx input matrix.
1799 */
1800 CV_EXPORTS_W Scalar trace(InputArray mtx);
1801
1802 /** @brief Finds the inverse or pseudo-inverse of a matrix.
1803
1804 The function cv::invert inverts the matrix src and stores the result in dst
1805 . When the matrix src is singular or non-square, the function calculates
1806 the pseudo-inverse matrix (the dst matrix) so that norm(src\*dst - I) is
1807 minimal, where I is an identity matrix.
1808
1809 In case of the #DECOMP_LU method, the function returns non-zero value if
1810 the inverse has been successfully calculated and 0 if src is singular.
1811
1812 In case of the #DECOMP_SVD method, the function returns the inverse
1813 condition number of src (the ratio of the smallest singular value to the
1814 largest singular value) and 0 if src is singular. The SVD method
1815 calculates a pseudo-inverse matrix if src is singular.
1816
1817 Similarly to #DECOMP_LU, the method #DECOMP_CHOLESKY works only with
1818 non-singular square matrices that should also be symmetrical and
1819 positively defined. In this case, the function stores the inverted
1820 matrix in dst and returns non-zero. Otherwise, it returns 0.
1821
1822 @param src input floating-point M x N matrix.
1823 @param dst output matrix of N x M size and the same type as src.
1824 @param flags inversion method (cv::DecompTypes)
1825 @sa solve, SVD
1826 */
1827 CV_EXPORTS_W double invert(InputArray src, OutputArray dst, int flags = DECOMP_LU);
1828
1829 /** @brief Solves one or more linear systems or least-squares problems.
1830
1831 The function cv::solve solves a linear system or least-squares problem (the
1832 latter is possible with SVD or QR methods, or by specifying the flag
1833 #DECOMP_NORMAL ):
1834 \f[\texttt{dst} =  \arg \min _X \| \texttt{src1} \cdot \texttt{X} -  \texttt{src2} \|\f]
1835
1836 If #DECOMP_LU or #DECOMP_CHOLESKY method is used, the function returns 1
1837 if src1 (or \f$\texttt{src1}^T\texttt{src1}\f$ ) is non-singular. Otherwise,
1838 it returns 0. In the latter case, dst is not valid. Other methods find a
1839 pseudo-solution in case of a singular left-hand side part.
1840
1841 @note If you want to find a unity-norm solution of an under-defined
1842 singular system \f$\texttt{src1}\cdot\texttt{dst}=0\f$ , the function solve
1843 will not do the work. Use SVD::solveZ instead.
1844
1845 @param src1 input matrix on the left-hand side of the system.
1846 @param src2 input matrix on the right-hand side of the system.
1847 @param dst output solution.
1848 @param flags solution (matrix inversion) method (#DecompTypes)
1849 @sa invert, SVD, eigen
1850 */
1851 CV_EXPORTS_W bool solve(InputArray src1, InputArray src2,
1852                         OutputArray dst, int flags = DECOMP_LU);
1853
1854 /** @brief Sorts each row or each column of a matrix.
1855
1856 The function cv::sort sorts each matrix row or each matrix column in
1857 ascending or descending order. So you should pass two operation flags to
1858 get desired behaviour. If you want to sort matrix rows or columns
1859 lexicographically, you can use STL std::sort generic function with the
1860 proper comparison predicate.
1861
1862 @param src input single-channel array.
1863 @param dst output array of the same size and type as src.
1864 @param flags operation flags, a combination of #SortFlags
1865 @sa sortIdx, randShuffle
1866 */
1867 CV_EXPORTS_W void sort(InputArray src, OutputArray dst, int flags);
1868
1869 /** @brief Sorts each row or each column of a matrix.
1870
1871 The function cv::sortIdx sorts each matrix row or each matrix column in the
1872 ascending or descending order. So you should pass two operation flags to
1873 get desired behaviour. Instead of reordering the elements themselves, it
1874 stores the indices of sorted elements in the output array. For example:
1875 @code
1876     Mat A = Mat::eye(3,3,CV_32F), B;
1877     sortIdx(A, B, SORT_EVERY_ROW + SORT_ASCENDING);
1878     // B will probably contain
1879     // (because of equal elements in A some permutations are possible):
1880     // [[1, 2, 0], [0, 2, 1], [0, 1, 2]]
1881 @endcode
1882 @param src input single-channel array.
1883 @param dst output integer array of the same size as src.
1884 @param flags operation flags that could be a combination of cv::SortFlags
1885 @sa sort, randShuffle
1886 */
1887 CV_EXPORTS_W void sortIdx(InputArray src, OutputArray dst, int flags);
1888
1889 /** @brief Finds the real roots of a cubic equation.
1890
1891 The function solveCubic finds the real roots of a cubic equation:
1892 -   if coeffs is a 4-element vector:
1893 \f[\texttt{coeffs} [0] x^3 +  \texttt{coeffs} [1] x^2 +  \texttt{coeffs} [2] x +  \texttt{coeffs} [3] = 0\f]
1894 -   if coeffs is a 3-element vector:
1895 \f[x^3 +  \texttt{coeffs} [0] x^2 +  \texttt{coeffs} [1] x +  \texttt{coeffs} [2] = 0\f]
1896
1897 The roots are stored in the roots array.
1898 @param coeffs equation coefficients, an array of 3 or 4 elements.
1899 @param roots output array of real roots that has 1 or 3 elements.
1900 @return number of real roots. It can be 0, 1 or 2.
1901 */
1902 CV_EXPORTS_W int solveCubic(InputArray coeffs, OutputArray roots);
1903
1904 /** @brief Finds the real or complex roots of a polynomial equation.
1905
1906 The function cv::solvePoly finds real and complex roots of a polynomial equation:
1907 \f[\texttt{coeffs} [n] x^{n} +  \texttt{coeffs} [n-1] x^{n-1} + ... +  \texttt{coeffs} [1] x +  \texttt{coeffs} [0] = 0\f]
1908 @param coeffs array of polynomial coefficients.
1909 @param roots output (complex) array of roots.
1910 @param maxIters maximum number of iterations the algorithm does.
1911 */
1912 CV_EXPORTS_W double solvePoly(InputArray coeffs, OutputArray roots, int maxIters = 300);
1913
1914 /** @brief Calculates eigenvalues and eigenvectors of a symmetric matrix.
1915
1916 The function cv::eigen calculates just eigenvalues, or eigenvalues and eigenvectors of the symmetric
1917 matrix src:
1918 @code
1919     src*eigenvectors.row(i).t() = eigenvalues.at<srcType>(i)*eigenvectors.row(i).t()
1920 @endcode
1921
1922 @note Use cv::eigenNonSymmetric for calculation of real eigenvalues and eigenvectors of non-symmetric matrix.
1923
1924 @param src input matrix that must have CV_32FC1 or CV_64FC1 type, square size and be symmetrical
1925 (src ^T^ == src).
1926 @param eigenvalues output vector of eigenvalues of the same type as src; the eigenvalues are stored
1927 in the descending order.
1928 @param eigenvectors output matrix of eigenvectors; it has the same size and type as src; the
1929 eigenvectors are stored as subsequent matrix rows, in the same order as the corresponding
1930 eigenvalues.
1931 @sa eigenNonSymmetric, completeSymm , PCA
1932 */
1933 CV_EXPORTS_W bool eigen(InputArray src, OutputArray eigenvalues,
1934                         OutputArray eigenvectors = noArray());
1935
1936 /** @brief Calculates eigenvalues and eigenvectors of a non-symmetric matrix (real eigenvalues only).
1937
1938 @note Assumes real eigenvalues.
1939
1940 The function calculates eigenvalues and eigenvectors (optional) of the square matrix src:
1941 @code
1942     src*eigenvectors.row(i).t() = eigenvalues.at<srcType>(i)*eigenvectors.row(i).t()
1943 @endcode
1944
1945 @param src input matrix (CV_32FC1 or CV_64FC1 type).
1946 @param eigenvalues output vector of eigenvalues (type is the same type as src).
1947 @param eigenvectors output matrix of eigenvectors (type is the same type as src). The eigenvectors are stored as subsequent matrix rows, in the same order as the corresponding eigenvalues.
1948 @sa eigen
1949 */
1950 CV_EXPORTS_W void eigenNonSymmetric(InputArray src, OutputArray eigenvalues,
1951                                     OutputArray eigenvectors);
1952
1953 /** @brief Calculates the covariance matrix of a set of vectors.
1954
1955 The function cv::calcCovarMatrix calculates the covariance matrix and, optionally, the mean vector of
1956 the set of input vectors.
1957 @param samples samples stored as separate matrices
1958 @param nsamples number of samples
1959 @param covar output covariance matrix of the type ctype and square size.
1960 @param mean input or output (depending on the flags) array as the average value of the input vectors.
1961 @param flags operation flags as a combination of #CovarFlags
1962 @param ctype type of the matrixl; it equals 'CV_64F' by default.
1963 @sa PCA, mulTransposed, Mahalanobis
1964 @todo InputArrayOfArrays
1965 */
1966 CV_EXPORTS void calcCovarMatrix( const Mat* samples, int nsamples, Mat& covar, Mat& mean,
1967                                  int flags, int ctype = CV_64F);
1968
1969 /** @overload
1970 @note use #COVAR_ROWS or #COVAR_COLS flag
1971 @param samples samples stored as rows/columns of a single matrix.
1972 @param covar output covariance matrix of the type ctype and square size.
1973 @param mean input or output (depending on the flags) array as the average value of the input vectors.
1974 @param flags operation flags as a combination of #CovarFlags
1975 @param ctype type of the matrixl; it equals 'CV_64F' by default.
1976 */
1977 CV_EXPORTS_W void calcCovarMatrix( InputArray samples, OutputArray covar,
1978                                    InputOutputArray mean, int flags, int ctype = CV_64F);
1979
1980 /** wrap PCA::operator() */
1981 CV_EXPORTS_W void PCACompute(InputArray data, InputOutputArray mean,
1982                              OutputArray eigenvectors, int maxComponents = 0);
1983
1984 /** wrap PCA::operator() and add eigenvalues output parameter */
1985 CV_EXPORTS_AS(PCACompute2) void PCACompute(InputArray data, InputOutputArray mean,
1986                                            OutputArray eigenvectors, OutputArray eigenvalues,
1987                                            int maxComponents = 0);
1988
1989 /** wrap PCA::operator() */
1990 CV_EXPORTS_W void PCACompute(InputArray data, InputOutputArray mean,
1991                              OutputArray eigenvectors, double retainedVariance);
1992
1993 /** wrap PCA::operator() and add eigenvalues output parameter */
1994 CV_EXPORTS_AS(PCACompute2) void PCACompute(InputArray data, InputOutputArray mean,
1995                                            OutputArray eigenvectors, OutputArray eigenvalues,
1996                                            double retainedVariance);
1997
1998 /** wrap PCA::project */
1999 CV_EXPORTS_W void PCAProject(InputArray data, InputArray mean,
2000                              InputArray eigenvectors, OutputArray result);
2001
2002 /** wrap PCA::backProject */
2003 CV_EXPORTS_W void PCABackProject(InputArray data, InputArray mean,
2004                                  InputArray eigenvectors, OutputArray result);
2005
2006 /** wrap SVD::compute */
2007 CV_EXPORTS_W void SVDecomp( InputArray src, OutputArray w, OutputArray u, OutputArray vt, int flags = 0 );
2008
2009 /** wrap SVD::backSubst */
2010 CV_EXPORTS_W void SVBackSubst( InputArray w, InputArray u, InputArray vt,
2011                                InputArray rhs, OutputArray dst );
2012
2013 /** @brief Calculates the Mahalanobis distance between two vectors.
2014
2015 The function cv::Mahalanobis calculates and returns the weighted distance between two vectors:
2016 \f[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)})} }\f]
2017 The covariance matrix may be calculated using the #calcCovarMatrix function and then inverted using
2018 the invert function (preferably using the #DECOMP_SVD method, as the most accurate).
2019 @param v1 first 1D input vector.
2020 @param v2 second 1D input vector.
2021 @param icovar inverse covariance matrix.
2022 */
2023 CV_EXPORTS_W double Mahalanobis(InputArray v1, InputArray v2, InputArray icovar);
2024
2025 /** @brief Performs a forward or inverse Discrete Fourier transform of a 1D or 2D floating-point array.
2026
2027 The function cv::dft performs one of the following:
2028 -   Forward the Fourier transform of a 1D vector of N elements:
2029     \f[Y = F^{(N)}  \cdot X,\f]
2030     where \f$F^{(N)}_{jk}=\exp(-2\pi i j k/N)\f$ and \f$i=\sqrt{-1}\f$
2031 -   Inverse the Fourier transform of a 1D vector of N elements:
2032     \f[\begin{array}{l} X'=  \left (F^{(N)} \right )^{-1}  \cdot Y =  \left (F^{(N)} \right )^*  \cdot y  \\ X = (1/N)  \cdot X, \end{array}\f]
2033     where \f$F^*=\left(\textrm{Re}(F^{(N)})-\textrm{Im}(F^{(N)})\right)^T\f$
2034 -   Forward the 2D Fourier transform of a M x N matrix:
2035     \f[Y = F^{(M)}  \cdot X  \cdot F^{(N)}\f]
2036 -   Inverse the 2D Fourier transform of a M x N matrix:
2037     \f[\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}\f]
2038
2039 In case of real (single-channel) data, the output spectrum of the forward Fourier transform or input
2040 spectrum of the inverse Fourier transform can be represented in a packed format called *CCS*
2041 (complex-conjugate-symmetrical). It was borrowed from IPL (Intel\* Image Processing Library). Here
2042 is how 2D *CCS* spectrum looks:
2043 \f[\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}\f]
2044
2045 In case of 1D transform of a real vector, the output looks like the first row of the matrix above.
2046
2047 So, the function chooses an operation mode depending on the flags and size of the input array:
2048 -   If #DFT_ROWS is set or the input array has a single row or single column, the function
2049     performs a 1D forward or inverse transform of each row of a matrix when #DFT_ROWS is set.
2050     Otherwise, it performs a 2D transform.
2051 -   If the input array is real and #DFT_INVERSE is not set, the function performs a forward 1D or
2052     2D transform:
2053     -   When #DFT_COMPLEX_OUTPUT is set, the output is a complex matrix of the same size as
2054         input.
2055     -   When #DFT_COMPLEX_OUTPUT is not set, the output is a real matrix of the same size as
2056         input. In case of 2D transform, it uses the packed format as shown above. In case of a
2057         single 1D transform, it looks like the first row of the matrix above. In case of
2058         multiple 1D transforms (when using the #DFT_ROWS flag), each row of the output matrix
2059         looks like the first row of the matrix above.
2060 -   If the input array is complex and either #DFT_INVERSE or #DFT_REAL_OUTPUT are not set, the
2061     output is a complex array of the same size as input. The function performs a forward or
2062     inverse 1D or 2D transform of the whole input array or each row of the input array
2063     independently, depending on the flags DFT_INVERSE and DFT_ROWS.
2064 -   When #DFT_INVERSE is set and the input array is real, or it is complex but #DFT_REAL_OUTPUT
2065     is set, the output is a real array of the same size as input. The function performs a 1D or 2D
2066     inverse transformation of the whole input array or each individual row, depending on the flags
2067     #DFT_INVERSE and #DFT_ROWS.
2068
2069 If #DFT_SCALE is set, the scaling is done after the transformation.
2070
2071 Unlike dct , the function supports arrays of arbitrary size. But only those arrays are processed
2072 efficiently, whose sizes can be factorized in a product of small prime numbers (2, 3, and 5 in the
2073 current implementation). Such an efficient DFT size can be calculated using the getOptimalDFTSize
2074 method.
2075
2076 The sample below illustrates how to calculate a DFT-based convolution of two 2D real arrays:
2077 @code
2078     void convolveDFT(InputArray A, InputArray B, OutputArray C)
2079     {
2080         // reallocate the output array if needed
2081         C.create(abs(A.rows - B.rows)+1, abs(A.cols - B.cols)+1, A.type());
2082         Size dftSize;
2083         // calculate the size of DFT transform
2084         dftSize.width = getOptimalDFTSize(A.cols + B.cols - 1);
2085         dftSize.height = getOptimalDFTSize(A.rows + B.rows - 1);
2086
2087         // allocate temporary buffers and initialize them with 0's
2088         Mat tempA(dftSize, A.type(), Scalar::all(0));
2089         Mat tempB(dftSize, B.type(), Scalar::all(0));
2090
2091         // copy A and B to the top-left corners of tempA and tempB, respectively
2092         Mat roiA(tempA, Rect(0,0,A.cols,A.rows));
2093         A.copyTo(roiA);
2094         Mat roiB(tempB, Rect(0,0,B.cols,B.rows));
2095         B.copyTo(roiB);
2096
2097         // now transform the padded A & B in-place;
2098         // use "nonzeroRows" hint for faster processing
2099         dft(tempA, tempA, 0, A.rows);
2100         dft(tempB, tempB, 0, B.rows);
2101
2102         // multiply the spectrums;
2103         // the function handles packed spectrum representations well
2104         mulSpectrums(tempA, tempB, tempA);
2105
2106         // transform the product back from the frequency domain.
2107         // Even though all the result rows will be non-zero,
2108         // you need only the first C.rows of them, and thus you
2109         // pass nonzeroRows == C.rows
2110         dft(tempA, tempA, DFT_INVERSE + DFT_SCALE, C.rows);
2111
2112         // now copy the result back to C.
2113         tempA(Rect(0, 0, C.cols, C.rows)).copyTo(C);
2114
2115         // all the temporary buffers will be deallocated automatically
2116     }
2117 @endcode
2118 To optimize this sample, consider the following approaches:
2119 -   Since nonzeroRows != 0 is passed to the forward transform calls and since A and B are copied to
2120     the top-left corners of tempA and tempB, respectively, it is not necessary to clear the whole
2121     tempA and tempB. It is only necessary to clear the tempA.cols - A.cols ( tempB.cols - B.cols)
2122     rightmost columns of the matrices.
2123 -   This DFT-based convolution does not have to be applied to the whole big arrays, especially if B
2124     is significantly smaller than A or vice versa. Instead, you can calculate convolution by parts.
2125     To do this, you need to split the output array C into multiple tiles. For each tile, estimate
2126     which parts of A and B are required to calculate convolution in this tile. If the tiles in C are
2127     too small, the speed will decrease a lot because of repeated work. In the ultimate case, when
2128     each tile in C is a single pixel, the algorithm becomes equivalent to the naive convolution
2129     algorithm. If the tiles are too big, the temporary arrays tempA and tempB become too big and
2130     there is also a slowdown because of bad cache locality. So, there is an optimal tile size
2131     somewhere in the middle.
2132 -   If different tiles in C can be calculated in parallel and, thus, the convolution is done by
2133     parts, the loop can be threaded.
2134
2135 All of the above improvements have been implemented in #matchTemplate and #filter2D . Therefore, by
2136 using them, you can get the performance even better than with the above theoretically optimal
2137 implementation. Though, those two functions actually calculate cross-correlation, not convolution,
2138 so you need to "flip" the second convolution operand B vertically and horizontally using flip .
2139 @note
2140 -   An example using the discrete fourier transform can be found at
2141     opencv_source_code/samples/cpp/dft.cpp
2142 -   (Python) An example using the dft functionality to perform Wiener deconvolution can be found
2143     at opencv_source/samples/python/deconvolution.py
2144 -   (Python) An example rearranging the quadrants of a Fourier image can be found at
2145     opencv_source/samples/python/dft.py
2146 @param src input array that could be real or complex.
2147 @param dst output array whose size and type depends on the flags .
2148 @param flags transformation flags, representing a combination of the #DftFlags
2149 @param nonzeroRows when the parameter is not zero, the function assumes that only the first
2150 nonzeroRows rows of the input array (#DFT_INVERSE is not set) or only the first nonzeroRows of the
2151 output array (#DFT_INVERSE is set) contain non-zeros, thus, the function can handle the rest of the
2152 rows more efficiently and save some time; this technique is very useful for calculating array
2153 cross-correlation or convolution using DFT.
2154 @sa dct , getOptimalDFTSize , mulSpectrums, filter2D , matchTemplate , flip , cartToPolar ,
2155 magnitude , phase
2156 */
2157 CV_EXPORTS_W void dft(InputArray src, OutputArray dst, int flags = 0, int nonzeroRows = 0);
2158
2159 /** @brief Calculates the inverse Discrete Fourier Transform of a 1D or 2D array.
2160
2161 idft(src, dst, flags) is equivalent to dft(src, dst, flags | #DFT_INVERSE) .
2162 @note None of dft and idft scales the result by default. So, you should pass #DFT_SCALE to one of
2163 dft or idft explicitly to make these transforms mutually inverse.
2164 @sa dft, dct, idct, mulSpectrums, getOptimalDFTSize
2165 @param src input floating-point real or complex array.
2166 @param dst output array whose size and type depend on the flags.
2167 @param flags operation flags (see dft and #DftFlags).
2168 @param nonzeroRows number of dst rows to process; the rest of the rows have undefined content (see
2169 the convolution sample in dft description.
2170 */
2171 CV_EXPORTS_W void idft(InputArray src, OutputArray dst, int flags = 0, int nonzeroRows = 0);
2172
2173 /** @brief Performs a forward or inverse discrete Cosine transform of 1D or 2D array.
2174
2175 The function cv::dct performs a forward or inverse discrete Cosine transform (DCT) of a 1D or 2D
2176 floating-point array:
2177 -   Forward Cosine transform of a 1D vector of N elements:
2178     \f[Y = C^{(N)}  \cdot X\f]
2179     where
2180     \f[C^{(N)}_{jk}= \sqrt{\alpha_j/N} \cos \left ( \frac{\pi(2k+1)j}{2N} \right )\f]
2181     and
2182     \f$\alpha_0=1\f$, \f$\alpha_j=2\f$ for *j \> 0*.
2183 -   Inverse Cosine transform of a 1D vector of N elements:
2184     \f[X =  \left (C^{(N)} \right )^{-1}  \cdot Y =  \left (C^{(N)} \right )^T  \cdot Y\f]
2185     (since \f$C^{(N)}\f$ is an orthogonal matrix, \f$C^{(N)} \cdot \left(C^{(N)}\right)^T = I\f$ )
2186 -   Forward 2D Cosine transform of M x N matrix:
2187     \f[Y = C^{(N)}  \cdot X  \cdot \left (C^{(N)} \right )^T\f]
2188 -   Inverse 2D Cosine transform of M x N matrix:
2189     \f[X =  \left (C^{(N)} \right )^T  \cdot X  \cdot C^{(N)}\f]
2190
2191 The function chooses the mode of operation by looking at the flags and size of the input array:
2192 -   If (flags & #DCT_INVERSE) == 0 , the function does a forward 1D or 2D transform. Otherwise, it
2193     is an inverse 1D or 2D transform.
2194 -   If (flags & #DCT_ROWS) != 0 , the function performs a 1D transform of each row.
2195 -   If the array is a single column or a single row, the function performs a 1D transform.
2196 -   If none of the above is true, the function performs a 2D transform.
2197
2198 @note Currently dct supports even-size arrays (2, 4, 6 ...). For data analysis and approximation, you
2199 can pad the array when necessary.
2200 Also, the function performance depends very much, and not monotonically, on the array size (see
2201 getOptimalDFTSize ). In the current implementation DCT of a vector of size N is calculated via DFT
2202 of a vector of size N/2 . Thus, the optimal DCT size N1 \>= N can be calculated as:
2203 @code
2204     size_t getOptimalDCTSize(size_t N) { return 2*getOptimalDFTSize((N+1)/2); }
2205     N1 = getOptimalDCTSize(N);
2206 @endcode
2207 @param src input floating-point array.
2208 @param dst output array of the same size and type as src .
2209 @param flags transformation flags as a combination of cv::DftFlags (DCT_*)
2210 @sa dft , getOptimalDFTSize , idct
2211 */
2212 CV_EXPORTS_W void dct(InputArray src, OutputArray dst, int flags = 0);
2213
2214 /** @brief Calculates the inverse Discrete Cosine Transform of a 1D or 2D array.
2215
2216 idct(src, dst, flags) is equivalent to dct(src, dst, flags | DCT_INVERSE).
2217 @param src input floating-point single-channel array.
2218 @param dst output array of the same size and type as src.
2219 @param flags operation flags.
2220 @sa  dct, dft, idft, getOptimalDFTSize
2221 */
2222 CV_EXPORTS_W void idct(InputArray src, OutputArray dst, int flags = 0);
2223
2224 /** @brief Performs the per-element multiplication of two Fourier spectrums.
2225
2226 The function cv::mulSpectrums performs the per-element multiplication of the two CCS-packed or complex
2227 matrices that are results of a real or complex Fourier transform.
2228
2229 The function, together with dft and idft , may be used to calculate convolution (pass conjB=false )
2230 or correlation (pass conjB=true ) of two arrays rapidly. When the arrays are complex, they are
2231 simply multiplied (per element) with an optional conjugation of the second-array elements. When the
2232 arrays are real, they are assumed to be CCS-packed (see dft for details).
2233 @param a first input array.
2234 @param b second input array of the same size and type as src1 .
2235 @param c output array of the same size and type as src1 .
2236 @param flags operation flags; currently, the only supported flag is cv::DFT_ROWS, which indicates that
2237 each row of src1 and src2 is an independent 1D Fourier spectrum. If you do not want to use this flag, then simply add a `0` as value.
2238 @param conjB optional flag that conjugates the second input array before the multiplication (true)
2239 or not (false).
2240 */
2241 CV_EXPORTS_W void mulSpectrums(InputArray a, InputArray b, OutputArray c,
2242                                int flags, bool conjB = false);
2243
2244 /** @brief Returns the optimal DFT size for a given vector size.
2245
2246 DFT performance is not a monotonic function of a vector size. Therefore, when you calculate
2247 convolution of two arrays or perform the spectral analysis of an array, it usually makes sense to
2248 pad the input data with zeros to get a bit larger array that can be transformed much faster than the
2249 original one. Arrays whose size is a power-of-two (2, 4, 8, 16, 32, ...) are the fastest to process.
2250 Though, the arrays whose size is a product of 2's, 3's, and 5's (for example, 300 = 5\*5\*3\*2\*2)
2251 are also processed quite efficiently.
2252
2253 The function cv::getOptimalDFTSize returns the minimum number N that is greater than or equal to vecsize
2254 so that the DFT of a vector of size N can be processed efficiently. In the current implementation N
2255 = 2 ^p^ \* 3 ^q^ \* 5 ^r^ for some integer p, q, r.
2256
2257 The function returns a negative number if vecsize is too large (very close to INT_MAX ).
2258
2259 While the function cannot be used directly to estimate the optimal vector size for DCT transform
2260 (since the current DCT implementation supports only even-size vectors), it can be easily processed
2261 as getOptimalDFTSize((vecsize+1)/2)\*2.
2262 @param vecsize vector size.
2263 @sa dft , dct , idft , idct , mulSpectrums
2264 */
2265 CV_EXPORTS_W int getOptimalDFTSize(int vecsize);
2266
2267 /** @brief Returns the default random number generator.
2268
2269 The function cv::theRNG returns the default random number generator. For each thread, there is a
2270 separate random number generator, so you can use the function safely in multi-thread environments.
2271 If you just need to get a single random number using this generator or initialize an array, you can
2272 use randu or randn instead. But if you are going to generate many random numbers inside a loop, it
2273 is much faster to use this function to retrieve the generator and then use RNG::operator _Tp() .
2274 @sa RNG, randu, randn
2275 */
2276 CV_EXPORTS RNG& theRNG();
2277
2278 /** @brief Sets state of default random number generator.
2279
2280 The function cv::setRNGSeed sets state of default random number generator to custom value.
2281 @param seed new state for default random number generator
2282 @sa RNG, randu, randn
2283 */
2284 CV_EXPORTS_W void setRNGSeed(int seed);
2285
2286 /** @brief Generates a single uniformly-distributed random number or an array of random numbers.
2287
2288 Non-template variant of the function fills the matrix dst with uniformly-distributed
2289 random numbers from the specified range:
2290 \f[\texttt{low} _c  \leq \texttt{dst} (I)_c <  \texttt{high} _c\f]
2291 @param dst output array of random numbers; the array must be pre-allocated.
2292 @param low inclusive lower boundary of the generated random numbers.
2293 @param high exclusive upper boundary of the generated random numbers.
2294 @sa RNG, randn, theRNG
2295 */
2296 CV_EXPORTS_W void randu(InputOutputArray dst, InputArray low, InputArray high);
2297
2298 /** @brief Fills the array with normally distributed random numbers.
2299
2300 The function cv::randn fills the matrix dst with normally distributed random numbers with the specified
2301 mean vector and the standard deviation matrix. The generated random numbers are clipped to fit the
2302 value range of the output array data type.
2303 @param dst output array of random numbers; the array must be pre-allocated and have 1 to 4 channels.
2304 @param mean mean value (expectation) of the generated random numbers.
2305 @param stddev standard deviation of the generated random numbers; it can be either a vector (in
2306 which case a diagonal standard deviation matrix is assumed) or a square matrix.
2307 @sa RNG, randu
2308 */
2309 CV_EXPORTS_W void randn(InputOutputArray dst, InputArray mean, InputArray stddev);
2310
2311 /** @brief Shuffles the array elements randomly.
2312
2313 The function cv::randShuffle shuffles the specified 1D array by randomly choosing pairs of elements and
2314 swapping them. The number of such swap operations will be dst.rows\*dst.cols\*iterFactor .
2315 @param dst input/output numerical 1D array.
2316 @param iterFactor scale factor that determines the number of random swap operations (see the details
2317 below).
2318 @param rng optional random number generator used for shuffling; if it is zero, theRNG () is used
2319 instead.
2320 @sa RNG, sort
2321 */
2322 CV_EXPORTS_W void randShuffle(InputOutputArray dst, double iterFactor = 1., RNG* rng = 0);
2323
2324 /** @brief Principal Component Analysis
2325
2326 The class is used to calculate a special basis for a set of vectors. The
2327 basis will consist of eigenvectors of the covariance matrix calculated
2328 from the input set of vectors. The class %PCA can also transform
2329 vectors to/from the new coordinate space defined by the basis. Usually,
2330 in this new coordinate system, each vector from the original set (and
2331 any linear combination of such vectors) can be quite accurately
2332 approximated by taking its first few components, corresponding to the
2333 eigenvectors of the largest eigenvalues of the covariance matrix.
2334 Geometrically it means that you calculate a projection of the vector to
2335 a subspace formed by a few eigenvectors corresponding to the dominant
2336 eigenvalues of the covariance matrix. And usually such a projection is
2337 very close to the original vector. So, you can represent the original
2338 vector from a high-dimensional space with a much shorter vector
2339 consisting of the projected vector's coordinates in the subspace. Such a
2340 transformation is also known as Karhunen-Loeve Transform, or KLT.
2341 See http://en.wikipedia.org/wiki/Principal_component_analysis
2342
2343 The sample below is the function that takes two matrices. The first
2344 function stores a set of vectors (a row per vector) that is used to
2345 calculate PCA. The second function stores another "test" set of vectors
2346 (a row per vector). First, these vectors are compressed with PCA, then
2347 reconstructed back, and then the reconstruction error norm is computed
2348 and printed for each vector. :
2349
2350 @code{.cpp}
2351 using namespace cv;
2352
2353 PCA compressPCA(const Mat& pcaset, int maxComponents,
2354                 const Mat& testset, Mat& compressed)
2355 {
2356     PCA pca(pcaset, // pass the data
2357             Mat(), // we do not have a pre-computed mean vector,
2358                    // so let the PCA engine to compute it
2359             PCA::DATA_AS_ROW, // indicate that the vectors
2360                                 // are stored as matrix rows
2361                                 // (use PCA::DATA_AS_COL if the vectors are
2362                                 // the matrix columns)
2363             maxComponents // specify, how many principal components to retain
2364             );
2365     // if there is no test data, just return the computed basis, ready-to-use
2366     if( !testset.data )
2367         return pca;
2368     CV_Assert( testset.cols == pcaset.cols );
2369
2370     compressed.create(testset.rows, maxComponents, testset.type());
2371
2372     Mat reconstructed;
2373     for( int i = 0; i < testset.rows; i++ )
2374     {
2375         Mat vec = testset.row(i), coeffs = compressed.row(i), reconstructed;
2376         // compress the vector, the result will be stored
2377         // in the i-th row of the output matrix
2378         pca.project(vec, coeffs);
2379         // and then reconstruct it
2380         pca.backProject(coeffs, reconstructed);
2381         // and measure the error
2382         printf("%d. diff = %g\n", i, norm(vec, reconstructed, NORM_L2));
2383     }
2384     return pca;
2385 }
2386 @endcode
2387 @sa calcCovarMatrix, mulTransposed, SVD, dft, dct
2388 */
2389 class CV_EXPORTS PCA
2390 {
2391 public:
2392     enum Flags { DATA_AS_ROW = 0, //!< indicates that the input samples are stored as matrix rows
2393                  DATA_AS_COL = 1, //!< indicates that the input samples are stored as matrix columns
2394                  USE_AVG     = 2  //!
2395                };
2396
2397     /** @brief default constructor
2398
2399     The default constructor initializes an empty %PCA structure. The other
2400     constructors initialize the structure and call PCA::operator()().
2401     */
2402     PCA();
2403
2404     /** @overload
2405     @param data input samples stored as matrix rows or matrix columns.
2406     @param mean optional mean value; if the matrix is empty (@c noArray()),
2407     the mean is computed from the data.
2408     @param flags operation flags; currently the parameter is only used to
2409     specify the data layout (PCA::Flags)
2410     @param maxComponents maximum number of components that %PCA should
2411     retain; by default, all the components are retained.
2412     */
2413     PCA(InputArray data, InputArray mean, int flags, int maxComponents = 0);
2414
2415     /** @overload
2416     @param data input samples stored as matrix rows or matrix columns.
2417     @param mean optional mean value; if the matrix is empty (noArray()),
2418     the mean is computed from the data.
2419     @param flags operation flags; currently the parameter is only used to
2420     specify the data layout (PCA::Flags)
2421     @param retainedVariance Percentage of variance that PCA should retain.
2422     Using this parameter will let the PCA decided how many components to
2423     retain but it will always keep at least 2.
2424     */
2425     PCA(InputArray data, InputArray mean, int flags, double retainedVariance);
2426
2427     /** @brief performs %PCA
2428
2429     The operator performs %PCA of the supplied dataset. It is safe to reuse
2430     the same PCA structure for multiple datasets. That is, if the structure
2431     has been previously used with another dataset, the existing internal
2432     data is reclaimed and the new @ref eigenvalues, @ref eigenvectors and @ref
2433     mean are allocated and computed.
2434
2435     The computed @ref eigenvalues are sorted from the largest to the smallest and
2436     the corresponding @ref eigenvectors are stored as eigenvectors rows.
2437
2438     @param data input samples stored as the matrix rows or as the matrix
2439     columns.
2440     @param mean optional mean value; if the matrix is empty (noArray()),
2441     the mean is computed from the data.
2442     @param flags operation flags; currently the parameter is only used to
2443     specify the data layout. (Flags)
2444     @param maxComponents maximum number of components that PCA should
2445     retain; by default, all the components are retained.
2446     */
2447     PCA& operator()(InputArray data, InputArray mean, int flags, int maxComponents = 0);
2448
2449     /** @overload
2450     @param data input samples stored as the matrix rows or as the matrix
2451     columns.
2452     @param mean optional mean value; if the matrix is empty (noArray()),
2453     the mean is computed from the data.
2454     @param flags operation flags; currently the parameter is only used to
2455     specify the data layout. (PCA::Flags)
2456     @param retainedVariance Percentage of variance that %PCA should retain.
2457     Using this parameter will let the %PCA decided how many components to
2458     retain but it will always keep at least 2.
2459      */
2460     PCA& operator()(InputArray data, InputArray mean, int flags, double retainedVariance);
2461
2462     /** @brief Projects vector(s) to the principal component subspace.
2463
2464     The methods project one or more vectors to the principal component
2465     subspace, where each vector projection is represented by coefficients in
2466     the principal component basis. The first form of the method returns the
2467     matrix that the second form writes to the result. So the first form can
2468     be used as a part of expression while the second form can be more
2469     efficient in a processing loop.
2470     @param vec input vector(s); must have the same dimensionality and the
2471     same layout as the input data used at %PCA phase, that is, if
2472     DATA_AS_ROW are specified, then `vec.cols==data.cols`
2473     (vector dimensionality) and `vec.rows` is the number of vectors to
2474     project, and the same is true for the PCA::DATA_AS_COL case.
2475     */
2476     Mat project(InputArray vec) const;
2477
2478     /** @overload
2479     @param vec input vector(s); must have the same dimensionality and the
2480     same layout as the input data used at PCA phase, that is, if
2481     DATA_AS_ROW are specified, then `vec.cols==data.cols`
2482     (vector dimensionality) and `vec.rows` is the number of vectors to
2483     project, and the same is true for the PCA::DATA_AS_COL case.
2484     @param result output vectors; in case of PCA::DATA_AS_COL, the
2485     output matrix has as many columns as the number of input vectors, this
2486     means that `result.cols==vec.cols` and the number of rows match the
2487     number of principal components (for example, `maxComponents` parameter
2488     passed to the constructor).
2489      */
2490     void project(InputArray vec, OutputArray result) const;
2491
2492     /** @brief Reconstructs vectors from their PC projections.
2493
2494     The methods are inverse operations to PCA::project. They take PC
2495     coordinates of projected vectors and reconstruct the original vectors.
2496     Unless all the principal components have been retained, the
2497     reconstructed vectors are different from the originals. But typically,
2498     the difference is small if the number of components is large enough (but
2499     still much smaller than the original vector dimensionality). As a
2500     result, PCA is used.
2501     @param vec coordinates of the vectors in the principal component
2502     subspace, the layout and size are the same as of PCA::project output
2503     vectors.
2504      */
2505     Mat backProject(InputArray vec) const;
2506
2507     /** @overload
2508     @param vec coordinates of the vectors in the principal component
2509     subspace, the layout and size are the same as of PCA::project output
2510     vectors.
2511     @param result reconstructed vectors; the layout and size are the same as
2512     of PCA::project input vectors.
2513      */
2514     void backProject(InputArray vec, OutputArray result) const;
2515
2516     /** @brief write PCA objects
2517
2518     Writes @ref eigenvalues @ref eigenvectors and @ref mean to specified FileStorage
2519      */
2520     void write(FileStorage& fs) const;
2521
2522     /** @brief load PCA objects
2523
2524     Loads @ref eigenvalues @ref eigenvectors and @ref mean from specified FileNode
2525      */
2526     void read(const FileNode& fn);
2527
2528     Mat eigenvectors; //!< eigenvectors of the covariation matrix
2529     Mat eigenvalues; //!< eigenvalues of the covariation matrix
2530     Mat mean; //!< mean value subtracted before the projection and added after the back projection
2531 };
2532
2533 /** @example pca.cpp
2534   An example using %PCA for dimensionality reduction while maintaining an amount of variance
2535  */
2536
2537 /**
2538    @brief Linear Discriminant Analysis
2539    @todo document this class
2540  */
2541 class CV_EXPORTS LDA
2542 {
2543 public:
2544     /** @brief constructor
2545     Initializes a LDA with num_components (default 0).
2546     */
2547     explicit LDA(int num_components = 0);
2548
2549     /** Initializes and performs a Discriminant Analysis with Fisher's
2550      Optimization Criterion on given data in src and corresponding labels
2551      in labels. If 0 (or less) number of components are given, they are
2552      automatically determined for given data in computation.
2553     */
2554     LDA(InputArrayOfArrays src, InputArray labels, int num_components = 0);
2555
2556     /** Serializes this object to a given filename.
2557       */
2558     void save(const String& filename) const;
2559
2560     /** Deserializes this object from a given filename.
2561       */
2562     void load(const String& filename);
2563
2564     /** Serializes this object to a given cv::FileStorage.
2565       */
2566     void save(FileStorage& fs) const;
2567
2568     /** Deserializes this object from a given cv::FileStorage.
2569       */
2570     void load(const FileStorage& node);
2571
2572     /** destructor
2573       */
2574     ~LDA();
2575
2576     /** Compute the discriminants for data in src (row aligned) and labels.
2577       */
2578     void compute(InputArrayOfArrays src, InputArray labels);
2579
2580     /** Projects samples into the LDA subspace.
2581         src may be one or more row aligned samples.
2582       */
2583     Mat project(InputArray src);
2584
2585     /** Reconstructs projections from the LDA subspace.
2586         src may be one or more row aligned projections.
2587       */
2588     Mat reconstruct(InputArray src);
2589
2590     /** Returns the eigenvectors of this LDA.
2591       */
2592     Mat eigenvectors() const { return _eigenvectors; }
2593
2594     /** Returns the eigenvalues of this LDA.
2595       */
2596     Mat eigenvalues() const { return _eigenvalues; }
2597
2598     static Mat subspaceProject(InputArray W, InputArray mean, InputArray src);
2599     static Mat subspaceReconstruct(InputArray W, InputArray mean, InputArray src);
2600
2601 protected:
2602     int _num_components;
2603     Mat _eigenvectors;
2604     Mat _eigenvalues;
2605     void lda(InputArrayOfArrays src, InputArray labels);
2606 };
2607
2608 /** @brief Singular Value Decomposition
2609
2610 Class for computing Singular Value Decomposition of a floating-point
2611 matrix. The Singular Value Decomposition is used to solve least-square
2612 problems, under-determined linear systems, invert matrices, compute
2613 condition numbers, and so on.
2614
2615 If you want to compute a condition number of a matrix or an absolute value of
2616 its determinant, you do not need `u` and `vt`. You can pass
2617 flags=SVD::NO_UV|... . Another flag SVD::FULL_UV indicates that full-size u
2618 and vt must be computed, which is not necessary most of the time.
2619
2620 @sa invert, solve, eigen, determinant
2621 */
2622 class CV_EXPORTS SVD
2623 {
2624 public:
2625     enum Flags {
2626         /** allow the algorithm to modify the decomposed matrix; it can save space and speed up
2627             processing. currently ignored. */
2628         MODIFY_A = 1,
2629         /** indicates that only a vector of singular values `w` is to be processed, while u and vt
2630             will be set to empty matrices */
2631         NO_UV    = 2,
2632         /** when the matrix is not square, by default the algorithm produces u and vt matrices of
2633             sufficiently large size for the further A reconstruction; if, however, FULL_UV flag is
2634             specified, u and vt will be full-size square orthogonal matrices.*/
2635         FULL_UV  = 4
2636     };
2637
2638     /** @brief the default constructor
2639
2640     initializes an empty SVD structure
2641       */
2642     SVD();
2643
2644     /** @overload
2645     initializes an empty SVD structure and then calls SVD::operator()
2646     @param src decomposed matrix. The depth has to be CV_32F or CV_64F.
2647     @param flags operation flags (SVD::Flags)
2648       */
2649     SVD( InputArray src, int flags = 0 );
2650
2651     /** @brief the operator that performs SVD. The previously allocated u, w and vt are released.
2652
2653     The operator performs the singular value decomposition of the supplied
2654     matrix. The u,`vt` , and the vector of singular values w are stored in
2655     the structure. The same SVD structure can be reused many times with
2656     different matrices. Each time, if needed, the previous u,`vt` , and w
2657     are reclaimed and the new matrices are created, which is all handled by
2658     Mat::create.
2659     @param src decomposed matrix. The depth has to be CV_32F or CV_64F.
2660     @param flags operation flags (SVD::Flags)
2661       */
2662     SVD& operator ()( InputArray src, int flags = 0 );
2663
2664     /** @brief decomposes matrix and stores the results to user-provided matrices
2665
2666     The methods/functions perform SVD of matrix. Unlike SVD::SVD constructor
2667     and SVD::operator(), they store the results to the user-provided
2668     matrices:
2669
2670     @code{.cpp}
2671     Mat A, w, u, vt;
2672     SVD::compute(A, w, u, vt);
2673     @endcode
2674
2675     @param src decomposed matrix. The depth has to be CV_32F or CV_64F.
2676     @param w calculated singular values
2677     @param u calculated left singular vectors
2678     @param vt transposed matrix of right singular vectors
2679     @param flags operation flags - see SVD::Flags.
2680       */
2681     static void compute( InputArray src, OutputArray w,
2682                          OutputArray u, OutputArray vt, int flags = 0 );
2683
2684     /** @overload
2685     computes singular values of a matrix
2686     @param src decomposed matrix. The depth has to be CV_32F or CV_64F.
2687     @param w calculated singular values
2688     @param flags operation flags - see SVD::Flags.
2689       */
2690     static void compute( InputArray src, OutputArray w, int flags = 0 );
2691
2692     /** @brief performs back substitution
2693       */
2694     static void backSubst( InputArray w, InputArray u,
2695                            InputArray vt, InputArray rhs,
2696                            OutputArray dst );
2697
2698     /** @brief solves an under-determined singular linear system
2699
2700     The method finds a unit-length solution x of a singular linear system
2701     A\*x = 0. Depending on the rank of A, there can be no solutions, a
2702     single solution or an infinite number of solutions. In general, the
2703     algorithm solves the following problem:
2704     \f[dst =  \arg \min _{x:  \| x \| =1}  \| src  \cdot x  \|\f]
2705     @param src left-hand-side matrix.
2706     @param dst found solution.
2707       */
2708     static void solveZ( InputArray src, OutputArray dst );
2709
2710     /** @brief performs a singular value back substitution.
2711
2712     The method calculates a back substitution for the specified right-hand
2713     side:
2714
2715     \f[\texttt{x} =  \texttt{vt} ^T  \cdot diag( \texttt{w} )^{-1}  \cdot \texttt{u} ^T  \cdot \texttt{rhs} \sim \texttt{A} ^{-1}  \cdot \texttt{rhs}\f]
2716
2717     Using this technique you can either get a very accurate solution of the
2718     convenient linear system, or the best (in the least-squares terms)
2719     pseudo-solution of an overdetermined linear system.
2720
2721     @param rhs right-hand side of a linear system (u\*w\*v')\*dst = rhs to
2722     be solved, where A has been previously decomposed.
2723
2724     @param dst found solution of the system.
2725
2726     @note Explicit SVD with the further back substitution only makes sense
2727     if you need to solve many linear systems with the same left-hand side
2728     (for example, src ). If all you need is to solve a single system
2729     (possibly with multiple rhs immediately available), simply call solve
2730     add pass #DECOMP_SVD there. It does absolutely the same thing.
2731       */
2732     void backSubst( InputArray rhs, OutputArray dst ) const;
2733
2734     /** @todo document */
2735     template<typename _Tp, int m, int n, int nm> static
2736     void compute( const Matx<_Tp, m, n>& a, Matx<_Tp, nm, 1>& w, Matx<_Tp, m, nm>& u, Matx<_Tp, n, nm>& vt );
2737
2738     /** @todo document */
2739     template<typename _Tp, int m, int n, int nm> static
2740     void compute( const Matx<_Tp, m, n>& a, Matx<_Tp, nm, 1>& w );
2741
2742     /** @todo document */
2743     template<typename _Tp, int m, int n, int nm, int nb> static
2744     void backSubst( const Matx<_Tp, nm, 1>& w, const Matx<_Tp, m, nm>& u, const Matx<_Tp, n, nm>& vt, const Matx<_Tp, m, nb>& rhs, Matx<_Tp, n, nb>& dst );
2745
2746     Mat u, w, vt;
2747 };
2748
2749 /** @brief Random Number Generator
2750
2751 Random number generator. It encapsulates the state (currently, a 64-bit
2752 integer) and has methods to return scalar random values and to fill
2753 arrays with random values. Currently it supports uniform and Gaussian
2754 (normal) distributions. The generator uses Multiply-With-Carry
2755 algorithm, introduced by G. Marsaglia (
2756 <http://en.wikipedia.org/wiki/Multiply-with-carry> ).
2757 Gaussian-distribution random numbers are generated using the Ziggurat
2758 algorithm ( <http://en.wikipedia.org/wiki/Ziggurat_algorithm> ),
2759 introduced by G. Marsaglia and W. W. Tsang.
2760 */
2761 class CV_EXPORTS RNG
2762 {
2763 public:
2764     enum { UNIFORM = 0,
2765            NORMAL  = 1
2766          };
2767
2768     /** @brief constructor
2769
2770     These are the RNG constructors. The first form sets the state to some
2771     pre-defined value, equal to 2\*\*32-1 in the current implementation. The
2772     second form sets the state to the specified value. If you passed state=0
2773     , the constructor uses the above default value instead to avoid the
2774     singular random number sequence, consisting of all zeros.
2775     */
2776     RNG();
2777     /** @overload
2778     @param state 64-bit value used to initialize the RNG.
2779     */
2780     RNG(uint64 state);
2781     /**The method updates the state using the MWC algorithm and returns the
2782     next 32-bit random number.*/
2783     unsigned next();
2784
2785     /**Each of the methods updates the state using the MWC algorithm and
2786     returns the next random number of the specified type. In case of integer
2787     types, the returned number is from the available value range for the
2788     specified type. In case of floating-point types, the returned value is
2789     from [0,1) range.
2790     */
2791     operator uchar();
2792     /** @overload */
2793     operator schar();
2794     /** @overload */
2795     operator ushort();
2796     /** @overload */
2797     operator short();
2798     /** @overload */
2799     operator unsigned();
2800     /** @overload */
2801     operator int();
2802     /** @overload */
2803     operator float();
2804     /** @overload */
2805     operator double();
2806
2807     /** @brief returns a random integer sampled uniformly from [0, N).
2808
2809     The methods transform the state using the MWC algorithm and return the
2810     next random number. The first form is equivalent to RNG::next . The
2811     second form returns the random number modulo N , which means that the
2812     result is in the range [0, N) .
2813     */
2814     unsigned operator ()();
2815     /** @overload
2816     @param N upper non-inclusive boundary of the returned random number.
2817     */
2818     unsigned operator ()(unsigned N);
2819
2820     /** @brief returns uniformly distributed integer random number from [a,b) range
2821
2822     The methods transform the state using the MWC algorithm and return the
2823     next uniformly-distributed random number of the specified type, deduced
2824     from the input parameter type, from the range [a, b) . There is a nuance
2825     illustrated by the following sample:
2826
2827     @code{.cpp}
2828     RNG rng;
2829
2830     // always produces 0
2831     double a = rng.uniform(0, 1);
2832
2833     // produces double from [0, 1)
2834     double a1 = rng.uniform((double)0, (double)1);
2835
2836     // produces float from [0, 1)
2837     float b = rng.uniform(0.f, 1.f);
2838
2839     // produces double from [0, 1)
2840     double c = rng.uniform(0., 1.);
2841
2842     // may cause compiler error because of ambiguity:
2843     //  RNG::uniform(0, (int)0.999999)? or RNG::uniform((double)0, 0.99999)?
2844     double d = rng.uniform(0, 0.999999);
2845     @endcode
2846
2847     The compiler does not take into account the type of the variable to
2848     which you assign the result of RNG::uniform . The only thing that
2849     matters to the compiler is the type of a and b parameters. So, if you
2850     want a floating-point random number, but the range boundaries are
2851     integer numbers, either put dots in the end, if they are constants, or
2852     use explicit type cast operators, as in the a1 initialization above.
2853     @param a lower inclusive boundary of the returned random number.
2854     @param b upper non-inclusive boundary of the returned random number.
2855       */
2856     int uniform(int a, int b);
2857     /** @overload */
2858     float uniform(float a, float b);
2859     /** @overload */
2860     double uniform(double a, double b);
2861
2862     /** @brief Fills arrays with random numbers.
2863
2864     @param mat 2D or N-dimensional matrix; currently matrices with more than
2865     4 channels are not supported by the methods, use Mat::reshape as a
2866     possible workaround.
2867     @param distType distribution type, RNG::UNIFORM or RNG::NORMAL.
2868     @param a first distribution parameter; in case of the uniform
2869     distribution, this is an inclusive lower boundary, in case of the normal
2870     distribution, this is a mean value.
2871     @param b second distribution parameter; in case of the uniform
2872     distribution, this is a non-inclusive upper boundary, in case of the
2873     normal distribution, this is a standard deviation (diagonal of the
2874     standard deviation matrix or the full standard deviation matrix).
2875     @param saturateRange pre-saturation flag; for uniform distribution only;
2876     if true, the method will first convert a and b to the acceptable value
2877     range (according to the mat datatype) and then will generate uniformly
2878     distributed random numbers within the range [saturate(a), saturate(b)),
2879     if saturateRange=false, the method will generate uniformly distributed
2880     random numbers in the original range [a, b) and then will saturate them,
2881     it means, for example, that
2882     <tt>theRNG().fill(mat_8u, RNG::UNIFORM, -DBL_MAX, DBL_MAX)</tt> will likely
2883     produce array mostly filled with 0's and 255's, since the range (0, 255)
2884     is significantly smaller than [-DBL_MAX, DBL_MAX).
2885
2886     Each of the methods fills the matrix with the random values from the
2887     specified distribution. As the new numbers are generated, the RNG state
2888     is updated accordingly. In case of multiple-channel images, every
2889     channel is filled independently, which means that RNG cannot generate
2890     samples from the multi-dimensional Gaussian distribution with
2891     non-diagonal covariance matrix directly. To do that, the method
2892     generates samples from multi-dimensional standard Gaussian distribution
2893     with zero mean and identity covariation matrix, and then transforms them
2894     using transform to get samples from the specified Gaussian distribution.
2895     */
2896     void fill( InputOutputArray mat, int distType, InputArray a, InputArray b, bool saturateRange = false );
2897
2898     /** @brief Returns the next random number sampled from the Gaussian distribution
2899     @param sigma standard deviation of the distribution.
2900
2901     The method transforms the state using the MWC algorithm and returns the
2902     next random number from the Gaussian distribution N(0,sigma) . That is,
2903     the mean value of the returned random numbers is zero and the standard
2904     deviation is the specified sigma .
2905     */
2906     double gaussian(double sigma);
2907
2908     uint64 state;
2909
2910     bool operator ==(const RNG& other) const;
2911 };
2912
2913 /** @brief Mersenne Twister random number generator
2914
2915 Inspired by http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/MT2002/CODES/mt19937ar.c
2916 @todo document
2917  */
2918 class CV_EXPORTS RNG_MT19937
2919 {
2920 public:
2921     RNG_MT19937();
2922     RNG_MT19937(unsigned s);
2923     void seed(unsigned s);
2924
2925     unsigned next();
2926
2927     operator int();
2928     operator unsigned();
2929     operator float();
2930     operator double();
2931
2932     unsigned operator ()(unsigned N);
2933     unsigned operator ()();
2934
2935     /** @brief returns uniformly distributed integer random number from [a,b) range
2936
2937 */
2938     int uniform(int a, int b);
2939     /** @brief returns uniformly distributed floating-point random number from [a,b) range
2940
2941 */
2942     float uniform(float a, float b);
2943     /** @brief returns uniformly distributed double-precision floating-point random number from [a,b) range
2944
2945 */
2946     double uniform(double a, double b);
2947
2948 private:
2949     enum PeriodParameters {N = 624, M = 397};
2950     unsigned state[N];
2951     int mti;
2952 };
2953
2954 //! @} core_array
2955
2956 //! @addtogroup core_cluster
2957 //!  @{
2958
2959 /** @example kmeans.cpp
2960   An example on K-means clustering
2961 */
2962
2963 /** @brief Finds centers of clusters and groups input samples around the clusters.
2964
2965 The function kmeans implements a k-means algorithm that finds the centers of cluster_count clusters
2966 and groups the input samples around the clusters. As an output, \f$\texttt{labels}_i\f$ contains a
2967 0-based cluster index for the sample stored in the \f$i^{th}\f$ row of the samples matrix.
2968
2969 @note
2970 -   (Python) An example on K-means clustering can be found at
2971     opencv_source_code/samples/python/kmeans.py
2972 @param data Data for clustering. An array of N-Dimensional points with float coordinates is needed.
2973 Examples of this array can be:
2974 -   Mat points(count, 2, CV_32F);
2975 -   Mat points(count, 1, CV_32FC2);
2976 -   Mat points(1, count, CV_32FC2);
2977 -   std::vector\<cv::Point2f\> points(sampleCount);
2978 @param K Number of clusters to split the set by.
2979 @param bestLabels Input/output integer array that stores the cluster indices for every sample.
2980 @param criteria The algorithm termination criteria, that is, the maximum number of iterations and/or
2981 the desired accuracy. The accuracy is specified as criteria.epsilon. As soon as each of the cluster
2982 centers moves by less than criteria.epsilon on some iteration, the algorithm stops.
2983 @param attempts Flag to specify the number of times the algorithm is executed using different
2984 initial labellings. The algorithm returns the labels that yield the best compactness (see the last
2985 function parameter).
2986 @param flags Flag that can take values of cv::KmeansFlags
2987 @param centers Output matrix of the cluster centers, one row per each cluster center.
2988 @return The function returns the compactness measure that is computed as
2989 \f[\sum _i  \| \texttt{samples} _i -  \texttt{centers} _{ \texttt{labels} _i} \| ^2\f]
2990 after every attempt. The best (minimum) value is chosen and the corresponding labels and the
2991 compactness value are returned by the function. Basically, you can use only the core of the
2992 function, set the number of attempts to 1, initialize labels each time using a custom algorithm,
2993 pass them with the ( flags = #KMEANS_USE_INITIAL_LABELS ) flag, and then choose the best
2994 (most-compact) clustering.
2995 */
2996 CV_EXPORTS_W double kmeans( InputArray data, int K, InputOutputArray bestLabels,
2997                             TermCriteria criteria, int attempts,
2998                             int flags, OutputArray centers = noArray() );
2999
3000 //! @} core_cluster
3001
3002 //! @addtogroup core_basic
3003 //! @{
3004
3005 /////////////////////////////// Formatted output of cv::Mat ///////////////////////////
3006
3007 /** @todo document */
3008 class CV_EXPORTS Formatted
3009 {
3010 public:
3011     virtual const char* next() = 0;
3012     virtual void reset() = 0;
3013     virtual ~Formatted();
3014 };
3015
3016 /** @todo document */
3017 class CV_EXPORTS Formatter
3018 {
3019 public:
3020     enum { FMT_DEFAULT = 0,
3021            FMT_MATLAB  = 1,
3022            FMT_CSV     = 2,
3023            FMT_PYTHON  = 3,
3024            FMT_NUMPY   = 4,
3025            FMT_C       = 5
3026          };
3027
3028     virtual ~Formatter();
3029
3030     virtual Ptr<Formatted> format(const Mat& mtx) const = 0;
3031
3032     virtual void set32fPrecision(int p = 8) = 0;
3033     virtual void set64fPrecision(int p = 16) = 0;
3034     virtual void setMultiline(bool ml = true) = 0;
3035
3036     static Ptr<Formatter> get(int fmt = FMT_DEFAULT);
3037
3038 };
3039
3040 static inline
3041 String& operator << (String& out, Ptr<Formatted> fmtd)
3042 {
3043     fmtd->reset();
3044     for(const char* str = fmtd->next(); str; str = fmtd->next())
3045         out += cv::String(str);
3046     return out;
3047 }
3048
3049 static inline
3050 String& operator << (String& out, const Mat& mtx)
3051 {
3052     return out << Formatter::get()->format(mtx);
3053 }
3054
3055 //////////////////////////////////////// Algorithm ////////////////////////////////////
3056
3057 class CV_EXPORTS Algorithm;
3058
3059 template<typename _Tp> struct ParamType {};
3060
3061
3062 /** @brief This is a base class for all more or less complex algorithms in OpenCV
3063
3064 especially for classes of algorithms, for which there can be multiple implementations. The examples
3065 are stereo correspondence (for which there are algorithms like block matching, semi-global block
3066 matching, graph-cut etc.), background subtraction (which can be done using mixture-of-gaussians
3067 models, codebook-based algorithm etc.), optical flow (block matching, Lucas-Kanade, Horn-Schunck
3068 etc.).
3069
3070 Here is example of SimpleBlobDetector use in your application via Algorithm interface:
3071 @snippet snippets/core_various.cpp Algorithm
3072  */
3073 class CV_EXPORTS_W Algorithm
3074 {
3075 public:
3076     Algorithm();
3077     virtual ~Algorithm();
3078
3079     /** @brief Clears the algorithm state
3080     */
3081     CV_WRAP virtual void clear() {}
3082
3083     /** @brief Stores algorithm parameters in a file storage
3084     */
3085     virtual void write(FileStorage& fs) const { (void)fs; }
3086
3087     /** @brief simplified API for language bindings
3088      * @overload
3089      */
3090     CV_WRAP void write(const Ptr<FileStorage>& fs, const String& name = String()) const;
3091
3092     /** @brief Reads algorithm parameters from a file storage
3093     */
3094     CV_WRAP virtual void read(const FileNode& fn) { (void)fn; }
3095
3096     /** @brief Returns true if the Algorithm is empty (e.g. in the very beginning or after unsuccessful read
3097      */
3098     CV_WRAP virtual bool empty() const { return false; }
3099
3100     /** @brief Reads algorithm from the file node
3101
3102      This is static template method of Algorithm. It's usage is following (in the case of SVM):
3103      @code
3104      cv::FileStorage fsRead("example.xml", FileStorage::READ);
3105      Ptr<SVM> svm = Algorithm::read<SVM>(fsRead.root());
3106      @endcode
3107      In order to make this method work, the derived class must overwrite Algorithm::read(const
3108      FileNode& fn) and also have static create() method without parameters
3109      (or with all the optional parameters)
3110      */
3111     template<typename _Tp> static Ptr<_Tp> read(const FileNode& fn)
3112     {
3113         Ptr<_Tp> obj = _Tp::create();
3114         obj->read(fn);
3115         return !obj->empty() ? obj : Ptr<_Tp>();
3116     }
3117
3118     /** @brief Loads algorithm from the file
3119
3120      @param filename Name of the file to read.
3121      @param objname The optional name of the node to read (if empty, the first top-level node will be used)
3122
3123      This is static template method of Algorithm. It's usage is following (in the case of SVM):
3124      @code
3125      Ptr<SVM> svm = Algorithm::load<SVM>("my_svm_model.xml");
3126      @endcode
3127      In order to make this method work, the derived class must overwrite Algorithm::read(const
3128      FileNode& fn).
3129      */
3130     template<typename _Tp> static Ptr<_Tp> load(const String& filename, const String& objname=String())
3131     {
3132         FileStorage fs(filename, FileStorage::READ);
3133         CV_Assert(fs.isOpened());
3134         FileNode fn = objname.empty() ? fs.getFirstTopLevelNode() : fs[objname];
3135         if (fn.empty()) return Ptr<_Tp>();
3136         Ptr<_Tp> obj = _Tp::create();
3137         obj->read(fn);
3138         return !obj->empty() ? obj : Ptr<_Tp>();
3139     }
3140
3141     /** @brief Loads algorithm from a String
3142
3143      @param strModel The string variable containing the model you want to load.
3144      @param objname The optional name of the node to read (if empty, the first top-level node will be used)
3145
3146      This is static template method of Algorithm. It's usage is following (in the case of SVM):
3147      @code
3148      Ptr<SVM> svm = Algorithm::loadFromString<SVM>(myStringModel);
3149      @endcode
3150      */
3151     template<typename _Tp> static Ptr<_Tp> loadFromString(const String& strModel, const String& objname=String())
3152     {
3153         FileStorage fs(strModel, FileStorage::READ + FileStorage::MEMORY);
3154         FileNode fn = objname.empty() ? fs.getFirstTopLevelNode() : fs[objname];
3155         Ptr<_Tp> obj = _Tp::create();
3156         obj->read(fn);
3157         return !obj->empty() ? obj : Ptr<_Tp>();
3158     }
3159
3160     /** Saves the algorithm to a file.
3161      In order to make this method work, the derived class must implement Algorithm::write(FileStorage& fs). */
3162     CV_WRAP virtual void save(const String& filename) const;
3163
3164     /** Returns the algorithm string identifier.
3165      This string is used as top level xml/yml node tag when the object is saved to a file or string. */
3166     CV_WRAP virtual String getDefaultName() const;
3167
3168 protected:
3169     void writeFormat(FileStorage& fs) const;
3170 };
3171
3172 struct Param {
3173     enum { INT=0, BOOLEAN=1, REAL=2, STRING=3, MAT=4, MAT_VECTOR=5, ALGORITHM=6, FLOAT=7,
3174            UNSIGNED_INT=8, UINT64=9, UCHAR=11, SCALAR=12 };
3175 };
3176
3177
3178
3179 template<> struct ParamType<bool>
3180 {
3181     typedef bool const_param_type;
3182     typedef bool member_type;
3183
3184     enum { type = Param::BOOLEAN };
3185 };
3186
3187 template<> struct ParamType<int>
3188 {
3189     typedef int const_param_type;
3190     typedef int member_type;
3191
3192     enum { type = Param::INT };
3193 };
3194
3195 template<> struct ParamType<double>
3196 {
3197     typedef double const_param_type;
3198     typedef double member_type;
3199
3200     enum { type = Param::REAL };
3201 };
3202
3203 template<> struct ParamType<String>
3204 {
3205     typedef const String& const_param_type;
3206     typedef String member_type;
3207
3208     enum { type = Param::STRING };
3209 };
3210
3211 template<> struct ParamType<Mat>
3212 {
3213     typedef const Mat& const_param_type;
3214     typedef Mat member_type;
3215
3216     enum { type = Param::MAT };
3217 };
3218
3219 template<> struct ParamType<std::vector<Mat> >
3220 {
3221     typedef const std::vector<Mat>& const_param_type;
3222     typedef std::vector<Mat> member_type;
3223
3224     enum { type = Param::MAT_VECTOR };
3225 };
3226
3227 template<> struct ParamType<Algorithm>
3228 {
3229     typedef const Ptr<Algorithm>& const_param_type;
3230     typedef Ptr<Algorithm> member_type;
3231
3232     enum { type = Param::ALGORITHM };
3233 };
3234
3235 template<> struct ParamType<float>
3236 {
3237     typedef float const_param_type;
3238     typedef float member_type;
3239
3240     enum { type = Param::FLOAT };
3241 };
3242
3243 template<> struct ParamType<unsigned>
3244 {
3245     typedef unsigned const_param_type;
3246     typedef unsigned member_type;
3247
3248     enum { type = Param::UNSIGNED_INT };
3249 };
3250
3251 template<> struct ParamType<uint64>
3252 {
3253     typedef uint64 const_param_type;
3254     typedef uint64 member_type;
3255
3256     enum { type = Param::UINT64 };
3257 };
3258
3259 template<> struct ParamType<uchar>
3260 {
3261     typedef uchar const_param_type;
3262     typedef uchar member_type;
3263
3264     enum { type = Param::UCHAR };
3265 };
3266
3267 template<> struct ParamType<Scalar>
3268 {
3269     typedef const Scalar& const_param_type;
3270     typedef Scalar member_type;
3271
3272     enum { type = Param::SCALAR };
3273 };
3274
3275 //! @} core_basic
3276
3277 } //namespace cv
3278
3279 #include "opencv2/core/operations.hpp"
3280 #include "opencv2/core/cvstd.inl.hpp"
3281 #include "opencv2/core/utility.hpp"
3282 #include "opencv2/core/optim.hpp"
3283 #include "opencv2/core/ovx.hpp"
3284
3285 #endif /*OPENCV_CORE_HPP*/