mirror of
https://github.com/opencv/opencv.git
synced 2024-11-25 19:50:38 +08:00
3d0410c147
it might cause errors, due to implicit type conversion and another cuda::divide overload
970 lines
38 KiB
C++
970 lines
38 KiB
C++
/*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.
|
|
@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.
|
|
@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 and type as the input array(s).
|
|
@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 image.
|
|
@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 image.
|
|
@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 image.
|
|
@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 image.
|
|
@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 ).
|
|
@param angle Source matrix containing angles ( CV_32FC1 ).
|
|
@param x Destination matrix of real components ( CV_32FC1 ).
|
|
@param y Destination matrix of imaginary components ( CV_32FC1 ).
|
|
@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
|
|
@param bottom
|
|
@param left
|
|
@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.
|
|
@param buf Optional buffer to avoid extra memory allocations. It is resized automatically.
|
|
|
|
@sa norm
|
|
*/
|
|
CV_EXPORTS double norm(InputArray src1, int normType, InputArray mask, GpuMat& buf);
|
|
/** @overload
|
|
uses new buffer, no mask
|
|
*/
|
|
static inline double norm(InputArray src, int normType)
|
|
{
|
|
GpuMat buf;
|
|
return norm(src, normType, GpuMat(), buf);
|
|
}
|
|
/** @overload
|
|
no mask
|
|
*/
|
|
static inline double norm(InputArray src, int normType, GpuMat& buf)
|
|
{
|
|
return norm(src, normType, GpuMat(), buf);
|
|
}
|
|
|
|
/** @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.
|
|
@param buf Optional buffer to avoid extra memory allocations. It is resized automatically.
|
|
|
|
@sa norm
|
|
*/
|
|
CV_EXPORTS double norm(InputArray src1, InputArray src2, GpuMat& buf, int normType=NORM_L2);
|
|
/** @overload
|
|
uses new buffer
|
|
*/
|
|
static inline double norm(InputArray src1, InputArray src2, int normType=NORM_L2)
|
|
{
|
|
GpuMat buf;
|
|
return norm(src1, src2, buf, normType);
|
|
}
|
|
|
|
/** @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.
|
|
@param buf Optional buffer to avoid extra memory allocations. It is resized automatically.
|
|
|
|
@sa sum
|
|
*/
|
|
CV_EXPORTS Scalar sum(InputArray src, InputArray mask, GpuMat& buf);
|
|
/** @overload
|
|
uses new buffer, no mask
|
|
*/
|
|
static inline Scalar sum(InputArray src)
|
|
{
|
|
GpuMat buf;
|
|
return sum(src, GpuMat(), buf);
|
|
}
|
|
/** @overload
|
|
no mask
|
|
*/
|
|
static inline Scalar sum(InputArray src, GpuMat& buf)
|
|
{
|
|
return sum(src, GpuMat(), buf);
|
|
}
|
|
|
|
/** @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.
|
|
@param buf Optional buffer to avoid extra memory allocations. It is resized automatically.
|
|
*/
|
|
CV_EXPORTS Scalar absSum(InputArray src, InputArray mask, GpuMat& buf);
|
|
/** @overload
|
|
uses new buffer, no mask
|
|
*/
|
|
static inline Scalar absSum(InputArray src)
|
|
{
|
|
GpuMat buf;
|
|
return absSum(src, GpuMat(), buf);
|
|
}
|
|
/** @overload
|
|
no mask
|
|
*/
|
|
static inline Scalar absSum(InputArray src, GpuMat& buf)
|
|
{
|
|
return absSum(src, GpuMat(), buf);
|
|
}
|
|
|
|
/** @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.
|
|
@param buf Optional buffer to avoid extra memory allocations. It is resized automatically.
|
|
*/
|
|
CV_EXPORTS Scalar sqrSum(InputArray src, InputArray mask, GpuMat& buf);
|
|
/** @overload
|
|
uses new buffer, no mask
|
|
*/
|
|
static inline Scalar sqrSum(InputArray src)
|
|
{
|
|
GpuMat buf;
|
|
return sqrSum(src, GpuMat(), buf);
|
|
}
|
|
/** @overload
|
|
no mask
|
|
*/
|
|
static inline Scalar sqrSum(InputArray src, GpuMat& buf)
|
|
{
|
|
return sqrSum(src, GpuMat(), buf);
|
|
}
|
|
|
|
/** @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.
|
|
@param buf Optional buffer to avoid extra memory allocations. It is resized automatically.
|
|
|
|
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, GpuMat& buf);
|
|
/** @overload
|
|
uses new buffer
|
|
*/
|
|
static inline void minMax(InputArray src, double* minVal, double* maxVal=0, InputArray mask=noArray())
|
|
{
|
|
GpuMat buf;
|
|
minMax(src, minVal, maxVal, mask, buf);
|
|
}
|
|
|
|
/** @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.
|
|
@param valbuf Optional values buffer to avoid extra memory allocations. It is resized
|
|
automatically.
|
|
@param locbuf Optional locations buffer to avoid extra memory allocations. It is resized
|
|
automatically.
|
|
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, GpuMat& valbuf, GpuMat& locbuf);
|
|
/** @overload
|
|
uses new buffer
|
|
*/
|
|
static inline void minMaxLoc(InputArray src, double* minVal, double* maxVal=0, Point* minLoc=0, Point* maxLoc=0,
|
|
InputArray mask=noArray())
|
|
{
|
|
GpuMat valBuf, locBuf;
|
|
minMaxLoc(src, minVal, maxVal, minLoc, maxLoc, mask, valBuf, locBuf);
|
|
}
|
|
|
|
/** @brief Counts non-zero matrix elements.
|
|
|
|
@param src Single-channel source image.
|
|
@param buf Optional buffer to avoid extra memory allocations. It is resized automatically.
|
|
|
|
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, GpuMat& buf);
|
|
/** @overload
|
|
uses new buffer
|
|
*/
|
|
static inline int countNonZero(const GpuMat& src)
|
|
{
|
|
GpuMat buf;
|
|
return countNonZero(src, buf);
|
|
}
|
|
|
|
/** @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.
|
|
@param buf Optional buffer to avoid extra memory allocations. It is resized automatically.
|
|
|
|
@sa meanStdDev
|
|
*/
|
|
CV_EXPORTS void meanStdDev(InputArray mtx, Scalar& mean, Scalar& stddev, GpuMat& buf);
|
|
/** @overload
|
|
uses new buffer
|
|
*/
|
|
static inline void meanStdDev(InputArray src, Scalar& mean, Scalar& stddev)
|
|
{
|
|
GpuMat buf;
|
|
meanStdDev(src, mean, stddev, buf);
|
|
}
|
|
|
|
/** @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 norm_buf Optional buffer to avoid extra memory allocations. It is resized automatically.
|
|
@param cvt_buf Optional buffer to avoid extra memory allocations. It is resized automatically.
|
|
|
|
@sa normalize
|
|
*/
|
|
CV_EXPORTS void normalize(InputArray src, OutputArray dst, double alpha, double beta,
|
|
int norm_type, int dtype, InputArray mask, GpuMat& norm_buf, GpuMat& cvt_buf);
|
|
/** @overload
|
|
uses new buffers
|
|
*/
|
|
static inline void normalize(InputArray src, OutputArray dst, double alpha = 1, double beta = 0,
|
|
int norm_type = NORM_L2, int dtype = -1, InputArray mask = noArray())
|
|
{
|
|
GpuMat norm_buf;
|
|
GpuMat cvt_buf;
|
|
normalize(src, dst, alpha, beta, norm_type, dtype, mask, norm_buf, cvt_buf);
|
|
}
|
|
|
|
/** @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 buffer Optional buffer to avoid extra memory allocations. It is resized automatically.
|
|
@param stream Stream for the asynchronous version.
|
|
|
|
@sa integral
|
|
*/
|
|
CV_EXPORTS void integral(InputArray src, OutputArray sum, GpuMat& buffer, Stream& stream = Stream::Null());
|
|
static inline void integralBuffered(InputArray src, OutputArray sum, GpuMat& buffer, Stream& stream = Stream::Null())
|
|
{
|
|
integral(src, sum, buffer, stream);
|
|
}
|
|
/** @overload
|
|
uses new buffer
|
|
*/
|
|
static inline void integral(InputArray src, OutputArray sum, Stream& stream = Stream::Null())
|
|
{
|
|
GpuMat buffer;
|
|
integral(src, sum, buffer, stream);
|
|
}
|
|
|
|
/** @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 buf Optional buffer to avoid extra memory allocations. It is resized automatically.
|
|
@param stream Stream for the asynchronous version.
|
|
*/
|
|
CV_EXPORTS void sqrIntegral(InputArray src, OutputArray sqsum, GpuMat& buf, Stream& stream = Stream::Null());
|
|
/** @overload
|
|
uses new buffer
|
|
*/
|
|
static inline void sqrIntegral(InputArray src, OutputArray sqsum, Stream& stream = Stream::Null())
|
|
{
|
|
GpuMat buffer;
|
|
sqrIntegral(src, sqsum, buffer, stream);
|
|
}
|
|
|
|
//! @} 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_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 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__ */
|