123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878 |
- /*M///////////////////////////////////////////////////////////////////////////////////////
- //
- // IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
- //
- // By downloading, copying, installing or using the software you agree to this license.
- // If you do not agree to this license, do not download, install,
- // copy or use the software.
- //
- //
- // License Agreement
- // For Open Source Computer Vision Library
- //
- // Copyright (C) 2000-2008, Intel Corporation, all rights reserved.
- // Copyright (C) 2009, Willow Garage Inc., all rights reserved.
- // Third party copyrights are property of their respective owners.
- //
- // Redistribution and use in source and binary forms, with or without modification,
- // are permitted provided that the following conditions are met:
- //
- // * Redistribution's of source code must retain the above copyright notice,
- // this list of conditions and the following disclaimer.
- //
- // * Redistribution's in binary form must reproduce the above copyright notice,
- // this list of conditions and the following disclaimer in the documentation
- // and/or other materials provided with the distribution.
- //
- // * The name of the copyright holders may not be used to endorse or promote products
- // derived from this software without specific prior written permission.
- //
- // This software is provided by the copyright holders and contributors "as is" and
- // any express or implied warranties, including, but not limited to, the implied
- // warranties of merchantability and fitness for a particular purpose are disclaimed.
- // In no event shall the Intel Corporation or contributors be liable for any direct,
- // indirect, incidental, special, exemplary, or consequential damages
- // (including, but not limited to, procurement of substitute goods or services;
- // loss of use, data, or profits; or business interruption) however caused
- // and on any theory of liability, whether in contract, strict liability,
- // or tort (including negligence or otherwise) arising in any way out of
- // the use of this software, even if advised of the possibility of such damage.
- //
- //M*/
- #ifndef OPENCV_CUDAARITHM_HPP
- #define OPENCV_CUDAARITHM_HPP
- #ifndef __cplusplus
- # error cudaarithm.hpp header must be compiled as C++
- #endif
- #include "opencv2/core/cuda.hpp"
- /**
- @addtogroup cuda
- @{
- @defgroup cudaarithm Operations on Matrices
- @{
- @defgroup cudaarithm_core Core Operations on Matrices
- @defgroup cudaarithm_elem Per-element Operations
- @defgroup cudaarithm_reduce Matrix Reductions
- @defgroup cudaarithm_arithm Arithm Operations on Matrices
- @}
- @}
- */
- namespace cv { namespace cuda {
- //! @addtogroup cudaarithm
- //! @{
- //! @addtogroup cudaarithm_elem
- //! @{
- /** @brief Computes a matrix-matrix or matrix-scalar sum.
- @param src1 First source matrix or scalar.
- @param src2 Second source matrix or scalar. Matrix should have the same size and type as src1 .
- @param dst Destination matrix that has the same size and number of channels as the input array(s).
- The depth is defined by dtype or src1 depth.
- @param mask Optional operation mask, 8-bit single channel array, that specifies elements of the
- destination array to be changed. The mask can be used only with single channel images.
- @param dtype Optional depth of the output array.
- @param stream Stream for the asynchronous version.
- @sa add
- */
- CV_EXPORTS void add(InputArray src1, InputArray src2, OutputArray dst, InputArray mask = noArray(), int dtype = -1, Stream& stream = Stream::Null());
- /** @brief Computes a matrix-matrix or matrix-scalar difference.
- @param src1 First source matrix or scalar.
- @param src2 Second source matrix or scalar. Matrix should have the same size and type as src1 .
- @param dst Destination matrix that has the same size and number of channels as the input array(s).
- The depth is defined by dtype or src1 depth.
- @param mask Optional operation mask, 8-bit single channel array, that specifies elements of the
- destination array to be changed. The mask can be used only with single channel images.
- @param dtype Optional depth of the output array.
- @param stream Stream for the asynchronous version.
- @sa subtract
- */
- CV_EXPORTS void subtract(InputArray src1, InputArray src2, OutputArray dst, InputArray mask = noArray(), int dtype = -1, Stream& stream = Stream::Null());
- /** @brief Computes a matrix-matrix or matrix-scalar per-element product.
- @param src1 First source matrix or scalar.
- @param src2 Second source matrix or scalar.
- @param dst Destination matrix that has the same size and number of channels as the input array(s).
- The depth is defined by dtype or src1 depth.
- @param scale Optional scale factor.
- @param dtype Optional depth of the output array.
- @param stream Stream for the asynchronous version.
- @sa multiply
- */
- CV_EXPORTS void multiply(InputArray src1, InputArray src2, OutputArray dst, double scale = 1, int dtype = -1, Stream& stream = Stream::Null());
- /** @brief Computes a matrix-matrix or matrix-scalar division.
- @param src1 First source matrix or a scalar.
- @param src2 Second source matrix or scalar.
- @param dst Destination matrix that has the same size and number of channels as the input array(s).
- The depth is defined by dtype or src1 depth.
- @param scale Optional scale factor.
- @param dtype Optional depth of the output array.
- @param stream Stream for the asynchronous version.
- This function, in contrast to divide, uses a round-down rounding mode.
- @sa divide
- */
- CV_EXPORTS void divide(InputArray src1, InputArray src2, OutputArray dst, double scale = 1, int dtype = -1, Stream& stream = Stream::Null());
- /** @brief Computes per-element absolute difference of two matrices (or of a matrix and scalar).
- @param src1 First source matrix or scalar.
- @param src2 Second source matrix or scalar.
- @param dst Destination matrix that has the same size and type as the input array(s).
- @param stream Stream for the asynchronous version.
- @sa absdiff
- */
- CV_EXPORTS void absdiff(InputArray src1, InputArray src2, OutputArray dst, Stream& stream = Stream::Null());
- /** @brief Computes an absolute value of each matrix element.
- @param src Source matrix.
- @param dst Destination matrix with the same size and type as src .
- @param stream Stream for the asynchronous version.
- @sa abs
- */
- CV_EXPORTS void abs(InputArray src, OutputArray dst, Stream& stream = Stream::Null());
- /** @brief Computes a square value of each matrix element.
- @param src Source matrix.
- @param dst Destination matrix with the same size and type as src .
- @param stream Stream for the asynchronous version.
- */
- CV_EXPORTS void sqr(InputArray src, OutputArray dst, Stream& stream = Stream::Null());
- /** @brief Computes a square root of each matrix element.
- @param src Source matrix.
- @param dst Destination matrix with the same size and type as src .
- @param stream Stream for the asynchronous version.
- @sa sqrt
- */
- CV_EXPORTS void sqrt(InputArray src, OutputArray dst, Stream& stream = Stream::Null());
- /** @brief Computes an exponent of each matrix element.
- @param src Source matrix.
- @param dst Destination matrix with the same size and type as src .
- @param stream Stream for the asynchronous version.
- @sa exp
- */
- CV_EXPORTS void exp(InputArray src, OutputArray dst, Stream& stream = Stream::Null());
- /** @brief Computes a natural logarithm of absolute value of each matrix element.
- @param src Source matrix.
- @param dst Destination matrix with the same size and type as src .
- @param stream Stream for the asynchronous version.
- @sa log
- */
- CV_EXPORTS void log(InputArray src, OutputArray dst, Stream& stream = Stream::Null());
- /** @brief Raises every matrix element to a power.
- @param src Source matrix.
- @param power Exponent of power.
- @param dst Destination matrix with the same size and type as src .
- @param stream Stream for the asynchronous version.
- The function pow raises every element of the input matrix to power :
- \f[\texttt{dst} (I) = \fork{\texttt{src}(I)^power}{if \texttt{power} is integer}{|\texttt{src}(I)|^power}{otherwise}\f]
- @sa pow
- */
- CV_EXPORTS void pow(InputArray src, double power, OutputArray dst, Stream& stream = Stream::Null());
- /** @brief Compares elements of two matrices (or of a matrix and scalar).
- @param src1 First source matrix or scalar.
- @param src2 Second source matrix or scalar.
- @param dst Destination matrix that has the same size as the input array(s) and type CV_8U.
- @param cmpop Flag specifying the relation between the elements to be checked:
- - **CMP_EQ:** a(.) == b(.)
- - **CMP_GT:** a(.) \> b(.)
- - **CMP_GE:** a(.) \>= b(.)
- - **CMP_LT:** a(.) \< b(.)
- - **CMP_LE:** a(.) \<= b(.)
- - **CMP_NE:** a(.) != b(.)
- @param stream Stream for the asynchronous version.
- @sa compare
- */
- CV_EXPORTS void compare(InputArray src1, InputArray src2, OutputArray dst, int cmpop, Stream& stream = Stream::Null());
- /** @brief Performs a per-element bitwise inversion.
- @param src Source matrix.
- @param dst Destination matrix with the same size and type as src .
- @param mask Optional operation mask, 8-bit single channel array, that specifies elements of the
- destination array to be changed. The mask can be used only with single channel images.
- @param stream Stream for the asynchronous version.
- */
- CV_EXPORTS void bitwise_not(InputArray src, OutputArray dst, InputArray mask = noArray(), Stream& stream = Stream::Null());
- /** @brief Performs a per-element bitwise disjunction of two matrices (or of matrix and scalar).
- @param src1 First source matrix or scalar.
- @param src2 Second source matrix or scalar.
- @param dst Destination matrix that has the same size and type as the input array(s).
- @param mask Optional operation mask, 8-bit single channel array, that specifies elements of the
- destination array to be changed. The mask can be used only with single channel images.
- @param stream Stream for the asynchronous version.
- */
- CV_EXPORTS void bitwise_or(InputArray src1, InputArray src2, OutputArray dst, InputArray mask = noArray(), Stream& stream = Stream::Null());
- /** @brief Performs a per-element bitwise conjunction of two matrices (or of matrix and scalar).
- @param src1 First source matrix or scalar.
- @param src2 Second source matrix or scalar.
- @param dst Destination matrix that has the same size and type as the input array(s).
- @param mask Optional operation mask, 8-bit single channel array, that specifies elements of the
- destination array to be changed. The mask can be used only with single channel images.
- @param stream Stream for the asynchronous version.
- */
- CV_EXPORTS void bitwise_and(InputArray src1, InputArray src2, OutputArray dst, InputArray mask = noArray(), Stream& stream = Stream::Null());
- /** @brief Performs a per-element bitwise exclusive or operation of two matrices (or of matrix and scalar).
- @param src1 First source matrix or scalar.
- @param src2 Second source matrix or scalar.
- @param dst Destination matrix that has the same size and type as the input array(s).
- @param mask Optional operation mask, 8-bit single channel array, that specifies elements of the
- destination array to be changed. The mask can be used only with single channel images.
- @param stream Stream for the asynchronous version.
- */
- CV_EXPORTS void bitwise_xor(InputArray src1, InputArray src2, OutputArray dst, InputArray mask = noArray(), Stream& stream = Stream::Null());
- /** @brief Performs pixel by pixel right shift of an image by a constant value.
- @param src Source matrix. Supports 1, 3 and 4 channels images with integers elements.
- @param val Constant values, one per channel.
- @param dst Destination matrix with the same size and type as src .
- @param stream Stream for the asynchronous version.
- */
- CV_EXPORTS void rshift(InputArray src, Scalar_<int> val, OutputArray dst, Stream& stream = Stream::Null());
- /** @brief Performs pixel by pixel right left of an image by a constant value.
- @param src Source matrix. Supports 1, 3 and 4 channels images with CV_8U , CV_16U or CV_32S
- depth.
- @param val Constant values, one per channel.
- @param dst Destination matrix with the same size and type as src .
- @param stream Stream for the asynchronous version.
- */
- CV_EXPORTS void lshift(InputArray src, Scalar_<int> val, OutputArray dst, Stream& stream = Stream::Null());
- /** @brief Computes the per-element minimum of two matrices (or a matrix and a scalar).
- @param src1 First source matrix or scalar.
- @param src2 Second source matrix or scalar.
- @param dst Destination matrix that has the same size and type as the input array(s).
- @param stream Stream for the asynchronous version.
- @sa min
- */
- CV_EXPORTS void min(InputArray src1, InputArray src2, OutputArray dst, Stream& stream = Stream::Null());
- /** @brief Computes the per-element maximum of two matrices (or a matrix and a scalar).
- @param src1 First source matrix or scalar.
- @param src2 Second source matrix or scalar.
- @param dst Destination matrix that has the same size and type as the input array(s).
- @param stream Stream for the asynchronous version.
- @sa max
- */
- CV_EXPORTS void max(InputArray src1, InputArray src2, OutputArray dst, Stream& stream = Stream::Null());
- /** @brief Computes the weighted sum of two arrays.
- @param src1 First source array.
- @param alpha Weight for the first array elements.
- @param src2 Second source array of the same size and channel number as src1 .
- @param beta Weight for the second array elements.
- @param dst Destination array that has the same size and number of channels as the input arrays.
- @param gamma Scalar added to each sum.
- @param dtype Optional depth of the destination array. When both input arrays have the same depth,
- dtype can be set to -1, which will be equivalent to src1.depth().
- @param stream Stream for the asynchronous version.
- The function addWeighted calculates the weighted sum of two arrays as follows:
- \f[\texttt{dst} (I)= \texttt{saturate} ( \texttt{src1} (I)* \texttt{alpha} + \texttt{src2} (I)* \texttt{beta} + \texttt{gamma} )\f]
- where I is a multi-dimensional index of array elements. In case of multi-channel arrays, each
- channel is processed independently.
- @sa addWeighted
- */
- CV_EXPORTS void addWeighted(InputArray src1, double alpha, InputArray src2, double beta, double gamma, OutputArray dst,
- int dtype = -1, Stream& stream = Stream::Null());
- //! adds scaled array to another one (dst = alpha*src1 + src2)
- static inline void scaleAdd(InputArray src1, double alpha, InputArray src2, OutputArray dst, Stream& stream = Stream::Null())
- {
- addWeighted(src1, alpha, src2, 1.0, 0.0, dst, -1, stream);
- }
- /** @brief Applies a fixed-level threshold to each array element.
- @param src Source array (single-channel).
- @param dst Destination array with the same size and type as src .
- @param thresh Threshold value.
- @param maxval Maximum value to use with THRESH_BINARY and THRESH_BINARY_INV threshold types.
- @param type Threshold type. For details, see threshold . The THRESH_OTSU and THRESH_TRIANGLE
- threshold types are not supported.
- @param stream Stream for the asynchronous version.
- @sa threshold
- */
- CV_EXPORTS double threshold(InputArray src, OutputArray dst, double thresh, double maxval, int type, Stream& stream = Stream::Null());
- /** @brief Computes magnitudes of complex matrix elements.
- @param xy Source complex matrix in the interleaved format ( CV_32FC2 ).
- @param magnitude Destination matrix of float magnitudes ( CV_32FC1 ).
- @param stream Stream for the asynchronous version.
- @sa magnitude
- */
- CV_EXPORTS void magnitude(InputArray xy, OutputArray magnitude, Stream& stream = Stream::Null());
- /** @brief Computes squared magnitudes of complex matrix elements.
- @param xy Source complex matrix in the interleaved format ( CV_32FC2 ).
- @param magnitude Destination matrix of float magnitude squares ( CV_32FC1 ).
- @param stream Stream for the asynchronous version.
- */
- CV_EXPORTS void magnitudeSqr(InputArray xy, OutputArray magnitude, Stream& stream = Stream::Null());
- /** @overload
- computes magnitude of each (x(i), y(i)) vector
- supports only floating-point source
- @param x Source matrix containing real components ( CV_32FC1 ).
- @param y Source matrix containing imaginary components ( CV_32FC1 ).
- @param magnitude Destination matrix of float magnitudes ( CV_32FC1 ).
- @param stream Stream for the asynchronous version.
- */
- CV_EXPORTS void magnitude(InputArray x, InputArray y, OutputArray magnitude, Stream& stream = Stream::Null());
- /** @overload
- computes squared magnitude of each (x(i), y(i)) vector
- supports only floating-point source
- @param x Source matrix containing real components ( CV_32FC1 ).
- @param y Source matrix containing imaginary components ( CV_32FC1 ).
- @param magnitude Destination matrix of float magnitude squares ( CV_32FC1 ).
- @param stream Stream for the asynchronous version.
- */
- CV_EXPORTS void magnitudeSqr(InputArray x, InputArray y, OutputArray magnitude, Stream& stream = Stream::Null());
- /** @brief Computes polar angles of complex matrix elements.
- @param x Source matrix containing real components ( CV_32FC1 ).
- @param y Source matrix containing imaginary components ( CV_32FC1 ).
- @param angle Destination matrix of angles ( CV_32FC1 ).
- @param angleInDegrees Flag for angles that must be evaluated in degrees.
- @param stream Stream for the asynchronous version.
- @sa phase
- */
- CV_EXPORTS void phase(InputArray x, InputArray y, OutputArray angle, bool angleInDegrees = false, Stream& stream = Stream::Null());
- /** @brief Converts Cartesian coordinates into polar.
- @param x Source matrix containing real components ( CV_32FC1 ).
- @param y Source matrix containing imaginary components ( CV_32FC1 ).
- @param magnitude Destination matrix of float magnitudes ( CV_32FC1 ).
- @param angle Destination matrix of angles ( CV_32FC1 ).
- @param angleInDegrees Flag for angles that must be evaluated in degrees.
- @param stream Stream for the asynchronous version.
- @sa cartToPolar
- */
- CV_EXPORTS void cartToPolar(InputArray x, InputArray y, OutputArray magnitude, OutputArray angle, bool angleInDegrees = false, Stream& stream = Stream::Null());
- /** @brief Converts polar coordinates into Cartesian.
- @param magnitude Source matrix containing magnitudes ( CV_32FC1 or CV_64FC1 ).
- @param angle Source matrix containing angles ( same type as magnitude ).
- @param x Destination matrix of real components ( same type as magnitude ).
- @param y Destination matrix of imaginary components ( same type as magnitude ).
- @param angleInDegrees Flag that indicates angles in degrees.
- @param stream Stream for the asynchronous version.
- */
- CV_EXPORTS void polarToCart(InputArray magnitude, InputArray angle, OutputArray x, OutputArray y, bool angleInDegrees = false, Stream& stream = Stream::Null());
- //! @} cudaarithm_elem
- //! @addtogroup cudaarithm_core
- //! @{
- /** @brief Makes a multi-channel matrix out of several single-channel matrices.
- @param src Array/vector of source matrices.
- @param n Number of source matrices.
- @param dst Destination matrix.
- @param stream Stream for the asynchronous version.
- @sa merge
- */
- CV_EXPORTS void merge(const GpuMat* src, size_t n, OutputArray dst, Stream& stream = Stream::Null());
- /** @overload */
- CV_EXPORTS void merge(const std::vector<GpuMat>& src, OutputArray dst, Stream& stream = Stream::Null());
- /** @brief Copies each plane of a multi-channel matrix into an array.
- @param src Source matrix.
- @param dst Destination array/vector of single-channel matrices.
- @param stream Stream for the asynchronous version.
- @sa split
- */
- CV_EXPORTS void split(InputArray src, GpuMat* dst, Stream& stream = Stream::Null());
- /** @overload */
- CV_EXPORTS void split(InputArray src, std::vector<GpuMat>& dst, Stream& stream = Stream::Null());
- /** @brief Transposes a matrix.
- @param src1 Source matrix. 1-, 4-, 8-byte element sizes are supported for now.
- @param dst Destination matrix.
- @param stream Stream for the asynchronous version.
- @sa transpose
- */
- CV_EXPORTS void transpose(InputArray src1, OutputArray dst, Stream& stream = Stream::Null());
- /** @brief Flips a 2D matrix around vertical, horizontal, or both axes.
- @param src Source matrix. Supports 1, 3 and 4 channels images with CV_8U, CV_16U, CV_32S or
- CV_32F depth.
- @param dst Destination matrix.
- @param flipCode Flip mode for the source:
- - 0 Flips around x-axis.
- - \> 0 Flips around y-axis.
- - \< 0 Flips around both axes.
- @param stream Stream for the asynchronous version.
- @sa flip
- */
- CV_EXPORTS void flip(InputArray src, OutputArray dst, int flipCode, Stream& stream = Stream::Null());
- /** @brief Base class for transform using lookup table.
- */
- class CV_EXPORTS LookUpTable : public Algorithm
- {
- public:
- /** @brief Transforms the source matrix into the destination matrix using the given look-up table:
- dst(I) = lut(src(I)) .
- @param src Source matrix. CV_8UC1 and CV_8UC3 matrices are supported for now.
- @param dst Destination matrix.
- @param stream Stream for the asynchronous version.
- */
- virtual void transform(InputArray src, OutputArray dst, Stream& stream = Stream::Null()) = 0;
- };
- /** @brief Creates implementation for cuda::LookUpTable .
- @param lut Look-up table of 256 elements. It is a continuous CV_8U matrix.
- */
- CV_EXPORTS Ptr<LookUpTable> createLookUpTable(InputArray lut);
- /** @brief Forms a border around an image.
- @param src Source image. CV_8UC1 , CV_8UC4 , CV_32SC1 , and CV_32FC1 types are supported.
- @param dst Destination image with the same type as src. The size is
- Size(src.cols+left+right, src.rows+top+bottom) .
- @param top Number of top pixels
- @param bottom Number of bottom pixels
- @param left Number of left pixels
- @param right Number of pixels in each direction from the source image rectangle to extrapolate.
- For example: top=1, bottom=1, left=1, right=1 mean that 1 pixel-wide border needs to be built.
- @param borderType Border type. See borderInterpolate for details. BORDER_REFLECT101 ,
- BORDER_REPLICATE , BORDER_CONSTANT , BORDER_REFLECT and BORDER_WRAP are supported for now.
- @param value Border value.
- @param stream Stream for the asynchronous version.
- */
- CV_EXPORTS void copyMakeBorder(InputArray src, OutputArray dst, int top, int bottom, int left, int right, int borderType,
- Scalar value = Scalar(), Stream& stream = Stream::Null());
- //! @} cudaarithm_core
- //! @addtogroup cudaarithm_reduce
- //! @{
- /** @brief Returns the norm of a matrix (or difference of two matrices).
- @param src1 Source matrix. Any matrices except 64F are supported.
- @param normType Norm type. NORM_L1 , NORM_L2 , and NORM_INF are supported for now.
- @param mask optional operation mask; it must have the same size as src1 and CV_8UC1 type.
- @sa norm
- */
- CV_EXPORTS double norm(InputArray src1, int normType, InputArray mask = noArray());
- /** @overload */
- CV_EXPORTS void calcNorm(InputArray src, OutputArray dst, int normType, InputArray mask = noArray(), Stream& stream = Stream::Null());
- /** @brief Returns the difference of two matrices.
- @param src1 Source matrix. Any matrices except 64F are supported.
- @param src2 Second source matrix (if any) with the same size and type as src1.
- @param normType Norm type. NORM_L1 , NORM_L2 , and NORM_INF are supported for now.
- @sa norm
- */
- CV_EXPORTS double norm(InputArray src1, InputArray src2, int normType=NORM_L2);
- /** @overload */
- CV_EXPORTS void calcNormDiff(InputArray src1, InputArray src2, OutputArray dst, int normType=NORM_L2, Stream& stream = Stream::Null());
- /** @brief Returns the sum of matrix elements.
- @param src Source image of any depth except for CV_64F .
- @param mask optional operation mask; it must have the same size as src1 and CV_8UC1 type.
- @sa sum
- */
- CV_EXPORTS Scalar sum(InputArray src, InputArray mask = noArray());
- /** @overload */
- CV_EXPORTS void calcSum(InputArray src, OutputArray dst, InputArray mask = noArray(), Stream& stream = Stream::Null());
- /** @brief Returns the sum of absolute values for matrix elements.
- @param src Source image of any depth except for CV_64F .
- @param mask optional operation mask; it must have the same size as src1 and CV_8UC1 type.
- */
- CV_EXPORTS Scalar absSum(InputArray src, InputArray mask = noArray());
- /** @overload */
- CV_EXPORTS void calcAbsSum(InputArray src, OutputArray dst, InputArray mask = noArray(), Stream& stream = Stream::Null());
- /** @brief Returns the squared sum of matrix elements.
- @param src Source image of any depth except for CV_64F .
- @param mask optional operation mask; it must have the same size as src1 and CV_8UC1 type.
- */
- CV_EXPORTS Scalar sqrSum(InputArray src, InputArray mask = noArray());
- /** @overload */
- CV_EXPORTS void calcSqrSum(InputArray src, OutputArray dst, InputArray mask = noArray(), Stream& stream = Stream::Null());
- /** @brief Finds global minimum and maximum matrix elements and returns their values.
- @param src Single-channel source image.
- @param minVal Pointer to the returned minimum value. Use NULL if not required.
- @param maxVal Pointer to the returned maximum value. Use NULL if not required.
- @param mask Optional mask to select a sub-matrix.
- The function does not work with CV_64F images on GPUs with the compute capability \< 1.3.
- @sa minMaxLoc
- */
- CV_EXPORTS void minMax(InputArray src, double* minVal, double* maxVal, InputArray mask = noArray());
- /** @overload */
- CV_EXPORTS void findMinMax(InputArray src, OutputArray dst, InputArray mask = noArray(), Stream& stream = Stream::Null());
- /** @brief Finds global minimum and maximum matrix elements and returns their values with locations.
- @param src Single-channel source image.
- @param minVal Pointer to the returned minimum value. Use NULL if not required.
- @param maxVal Pointer to the returned maximum value. Use NULL if not required.
- @param minLoc Pointer to the returned minimum location. Use NULL if not required.
- @param maxLoc Pointer to the returned maximum location. Use NULL if not required.
- @param mask Optional mask to select a sub-matrix.
- The function does not work with CV_64F images on GPU with the compute capability \< 1.3.
- @sa minMaxLoc
- */
- CV_EXPORTS void minMaxLoc(InputArray src, double* minVal, double* maxVal, Point* minLoc, Point* maxLoc,
- InputArray mask = noArray());
- /** @overload */
- CV_EXPORTS void findMinMaxLoc(InputArray src, OutputArray minMaxVals, OutputArray loc,
- InputArray mask = noArray(), Stream& stream = Stream::Null());
- /** @brief Counts non-zero matrix elements.
- @param src Single-channel source image.
- The function does not work with CV_64F images on GPUs with the compute capability \< 1.3.
- @sa countNonZero
- */
- CV_EXPORTS int countNonZero(InputArray src);
- /** @overload */
- CV_EXPORTS void countNonZero(InputArray src, OutputArray dst, Stream& stream = Stream::Null());
- /** @brief Reduces a matrix to a vector.
- @param mtx Source 2D matrix.
- @param vec Destination vector. Its size and type is defined by dim and dtype parameters.
- @param dim Dimension index along which the matrix is reduced. 0 means that the matrix is reduced
- to a single row. 1 means that the matrix is reduced to a single column.
- @param reduceOp Reduction operation that could be one of the following:
- - **CV_REDUCE_SUM** The output is the sum of all rows/columns of the matrix.
- - **CV_REDUCE_AVG** The output is the mean vector of all rows/columns of the matrix.
- - **CV_REDUCE_MAX** The output is the maximum (column/row-wise) of all rows/columns of the
- matrix.
- - **CV_REDUCE_MIN** The output is the minimum (column/row-wise) of all rows/columns of the
- matrix.
- @param dtype When it is negative, the destination vector will have the same type as the source
- matrix. Otherwise, its type will be CV_MAKE_TYPE(CV_MAT_DEPTH(dtype), mtx.channels()) .
- @param stream Stream for the asynchronous version.
- The function reduce reduces the matrix to a vector by treating the matrix rows/columns as a set of
- 1D vectors and performing the specified operation on the vectors until a single row/column is
- obtained. For example, the function can be used to compute horizontal and vertical projections of a
- raster image. In case of CV_REDUCE_SUM and CV_REDUCE_AVG , the output may have a larger element
- bit-depth to preserve accuracy. And multi-channel arrays are also supported in these two reduction
- modes.
- @sa reduce
- */
- CV_EXPORTS void reduce(InputArray mtx, OutputArray vec, int dim, int reduceOp, int dtype = -1, Stream& stream = Stream::Null());
- /** @brief Computes a mean value and a standard deviation of matrix elements.
- @param mtx Source matrix. CV_8UC1 matrices are supported for now.
- @param mean Mean value.
- @param stddev Standard deviation value.
- @sa meanStdDev
- */
- CV_EXPORTS void meanStdDev(InputArray mtx, Scalar& mean, Scalar& stddev);
- /** @overload */
- CV_EXPORTS void meanStdDev(InputArray mtx, OutputArray dst, Stream& stream = Stream::Null());
- /** @brief Computes a standard deviation of integral images.
- @param src Source image. Only the CV_32SC1 type is supported.
- @param sqr Squared source image. Only the CV_32FC1 type is supported.
- @param dst Destination image with the same type and size as src .
- @param rect Rectangular window.
- @param stream Stream for the asynchronous version.
- */
- CV_EXPORTS void rectStdDev(InputArray src, InputArray sqr, OutputArray dst, Rect rect, Stream& stream = Stream::Null());
- /** @brief Normalizes the norm or value range of an array.
- @param src Input array.
- @param dst Output array of the same size as src .
- @param alpha Norm value to normalize to or the lower range boundary in case of the range
- normalization.
- @param beta Upper range boundary in case of the range normalization; it is not used for the norm
- normalization.
- @param norm_type Normalization type ( NORM_MINMAX , NORM_L2 , NORM_L1 or NORM_INF ).
- @param dtype When negative, the output array has the same type as src; otherwise, it has the same
- number of channels as src and the depth =CV_MAT_DEPTH(dtype).
- @param mask Optional operation mask.
- @param stream Stream for the asynchronous version.
- @sa normalize
- */
- CV_EXPORTS void normalize(InputArray src, OutputArray dst, double alpha, double beta,
- int norm_type, int dtype, InputArray mask = noArray(),
- Stream& stream = Stream::Null());
- /** @brief Computes an integral image.
- @param src Source image. Only CV_8UC1 images are supported for now.
- @param sum Integral image containing 32-bit unsigned integer values packed into CV_32SC1 .
- @param stream Stream for the asynchronous version.
- @sa integral
- */
- CV_EXPORTS void integral(InputArray src, OutputArray sum, Stream& stream = Stream::Null());
- /** @brief Computes a squared integral image.
- @param src Source image. Only CV_8UC1 images are supported for now.
- @param sqsum Squared integral image containing 64-bit unsigned integer values packed into
- CV_64FC1 .
- @param stream Stream for the asynchronous version.
- */
- CV_EXPORTS void sqrIntegral(InputArray src, OutputArray sqsum, Stream& stream = Stream::Null());
- //! @} cudaarithm_reduce
- //! @addtogroup cudaarithm_arithm
- //! @{
- /** @brief Performs generalized matrix multiplication.
- @param src1 First multiplied input matrix that should have CV_32FC1 , CV_64FC1 , CV_32FC2 , or
- CV_64FC2 type.
- @param src2 Second multiplied input matrix of the same type as src1 .
- @param alpha Weight of the matrix product.
- @param src3 Third optional delta matrix added to the matrix product. It should have the same type
- as src1 and src2 .
- @param beta Weight of src3 .
- @param dst Destination matrix. It has the proper size and the same type as input matrices.
- @param flags Operation flags:
- - **GEMM_1_T** transpose src1
- - **GEMM_2_T** transpose src2
- - **GEMM_3_T** transpose src3
- @param stream Stream for the asynchronous version.
- The function performs generalized matrix multiplication similar to the gemm functions in BLAS level
- 3. For example, gemm(src1, src2, alpha, src3, beta, dst, GEMM_1_T + GEMM_3_T) corresponds to
- \f[\texttt{dst} = \texttt{alpha} \cdot \texttt{src1} ^T \cdot \texttt{src2} + \texttt{beta} \cdot \texttt{src3} ^T\f]
- @note Transposition operation doesn't support CV_64FC2 input type.
- @sa gemm
- */
- CV_EXPORTS void gemm(InputArray src1, InputArray src2, double alpha,
- InputArray src3, double beta, OutputArray dst, int flags = 0, Stream& stream = Stream::Null());
- /** @brief Performs a per-element multiplication of two Fourier spectrums.
- @param src1 First spectrum.
- @param src2 Second spectrum with the same size and type as a .
- @param dst Destination spectrum.
- @param flags Mock parameter used for CPU/CUDA interfaces similarity.
- @param conjB Optional flag to specify if the second spectrum needs to be conjugated before the
- multiplication.
- @param stream Stream for the asynchronous version.
- Only full (not packed) CV_32FC2 complex spectrums in the interleaved format are supported for now.
- @sa mulSpectrums
- */
- CV_EXPORTS void mulSpectrums(InputArray src1, InputArray src2, OutputArray dst, int flags, bool conjB=false, Stream& stream = Stream::Null());
- /** @brief Performs a per-element multiplication of two Fourier spectrums and scales the result.
- @param src1 First spectrum.
- @param src2 Second spectrum with the same size and type as a .
- @param dst Destination spectrum.
- @param flags Mock parameter used for CPU/CUDA interfaces similarity, simply add a `0` value.
- @param scale Scale constant.
- @param conjB Optional flag to specify if the second spectrum needs to be conjugated before the
- multiplication.
- @param stream Stream for the asynchronous version.
- Only full (not packed) CV_32FC2 complex spectrums in the interleaved format are supported for now.
- @sa mulSpectrums
- */
- CV_EXPORTS void mulAndScaleSpectrums(InputArray src1, InputArray src2, OutputArray dst, int flags, float scale, bool conjB=false, Stream& stream = Stream::Null());
- /** @brief Performs a forward or inverse discrete Fourier transform (1D or 2D) of the floating point matrix.
- @param src Source matrix (real or complex).
- @param dst Destination matrix (real or complex).
- @param dft_size Size of a discrete Fourier transform.
- @param flags Optional flags:
- - **DFT_ROWS** transforms each individual row of the source matrix.
- - **DFT_SCALE** scales the result: divide it by the number of elements in the transform
- (obtained from dft_size ).
- - **DFT_INVERSE** inverts DFT. Use for complex-complex cases (real-complex and complex-real
- cases are always forward and inverse, respectively).
- - **DFT_COMPLEX_INPUT** Specifies that input is complex input with 2 channels.
- - **DFT_REAL_OUTPUT** specifies the output as real. The source matrix is the result of
- real-complex transform, so the destination matrix must be real.
- @param stream Stream for the asynchronous version.
- Use to handle real matrices ( CV32FC1 ) and complex matrices in the interleaved format ( CV32FC2 ).
- The source matrix should be continuous, otherwise reallocation and data copying is performed. The
- function chooses an operation mode depending on the flags, size, and channel count of the source
- matrix:
- - If the source matrix is complex and the output is not specified as real, the destination
- matrix is complex and has the dft_size size and CV_32FC2 type. The destination matrix
- contains a full result of the DFT (forward or inverse).
- - If the source matrix is complex and the output is specified as real, the function assumes that
- its input is the result of the forward transform (see the next item). The destination matrix
- has the dft_size size and CV_32FC1 type. It contains the result of the inverse DFT.
- - If the source matrix is real (its type is CV_32FC1 ), forward DFT is performed. The result of
- the DFT is packed into complex ( CV_32FC2 ) matrix. So, the width of the destination matrix
- is dft_size.width / 2 + 1 . But if the source is a single column, the height is reduced
- instead of the width.
- @sa dft
- */
- CV_EXPORTS void dft(InputArray src, OutputArray dst, Size dft_size, int flags=0, Stream& stream = Stream::Null());
- /** @brief Base class for DFT operator as a cv::Algorithm. :
- */
- class CV_EXPORTS DFT : public Algorithm
- {
- public:
- /** @brief Computes an FFT of a given image.
- @param image Source image. Only CV_32FC1 images are supported for now.
- @param result Result image.
- @param stream Stream for the asynchronous version.
- */
- virtual void compute(InputArray image, OutputArray result, Stream& stream = Stream::Null()) = 0;
- };
- /** @brief Creates implementation for cuda::DFT.
- @param dft_size The image size.
- @param flags Optional flags:
- - **DFT_ROWS** transforms each individual row of the source matrix.
- - **DFT_SCALE** scales the result: divide it by the number of elements in the transform
- (obtained from dft_size ).
- - **DFT_INVERSE** inverts DFT. Use for complex-complex cases (real-complex and complex-real
- cases are always forward and inverse, respectively).
- - **DFT_COMPLEX_INPUT** Specifies that inputs will be complex with 2 channels.
- - **DFT_REAL_OUTPUT** specifies the output as real. The source matrix is the result of
- real-complex transform, so the destination matrix must be real.
- */
- CV_EXPORTS Ptr<DFT> createDFT(Size dft_size, int flags);
- /** @brief Base class for convolution (or cross-correlation) operator. :
- */
- class CV_EXPORTS Convolution : public Algorithm
- {
- public:
- /** @brief Computes a convolution (or cross-correlation) of two images.
- @param image Source image. Only CV_32FC1 images are supported for now.
- @param templ Template image. The size is not greater than the image size. The type is the same as
- image .
- @param result Result image. If image is *W x H* and templ is *w x h*, then result must be *W-w+1 x
- H-h+1*.
- @param ccorr Flags to evaluate cross-correlation instead of convolution.
- @param stream Stream for the asynchronous version.
- */
- virtual void convolve(InputArray image, InputArray templ, OutputArray result, bool ccorr = false, Stream& stream = Stream::Null()) = 0;
- };
- /** @brief Creates implementation for cuda::Convolution .
- @param user_block_size Block size. If you leave default value Size(0,0) then automatic
- estimation of block size will be used (which is optimized for speed). By varying user_block_size
- you can reduce memory requirements at the cost of speed.
- */
- CV_EXPORTS Ptr<Convolution> createConvolution(Size user_block_size = Size());
- //! @} cudaarithm_arithm
- //! @} cudaarithm
- }} // namespace cv { namespace cuda {
- #endif /* OPENCV_CUDAARITHM_HPP */
|