\section{Matrix Reductions}


\cvCppFunc{gpu::meanStdDev}
Computes mean value and standard deviation of matrix elements.

\cvdefCpp{void meanStdDev(const GpuMat\& mtx, Scalar\& mean, Scalar\& stddev);}
\begin{description}
\cvarg{mtx}{Source matrix. \texttt{CV\_8UC1} matrices are supported for now.}
\cvarg{mean}{Mean value.}
\cvarg{stddev}{Standard deviation value.}
\end{description}

See also: \cvCppCross{meanStdDev}.


\cvCppFunc{gpu::norm}
Returns norm of matrix (or of two matrices difference).

\cvdefCpp{double norm(const GpuMat\& src, int normType=NORM\_L2);}
\begin{description}
\cvarg{src}{Source matrix. Any matrices except 64F are supported.}
\cvarg{normType}{Norm type. \texttt{NORM\_L1}, \texttt{NORM\_L2} and \texttt{NORM\_INF} are supported for now.}
\end{description}

\cvdefCpp{double norm(const GpuMat\& src, int normType, GpuMat\& buf);}
\begin{description}
\cvarg{src}{Source matrix. Any matrices except 64F are supported.}
\cvarg{normType}{Norm type. \texttt{NORM\_L1}, \texttt{NORM\_L2} and \texttt{NORM\_INF} are supported for now.}
\cvarg{buf}{Optional buffer to avoid extra memory allocations. It's resized automatically.}
\end{description}

\cvdefCpp{double norm(const GpuMat\& src1, const GpuMat\& src2,\par
  int normType=NORM\_L2);}
\begin{description}
\cvarg{src1}{First source matrix. \texttt{CV\_8UC1} matrices are supported for now.}
\cvarg{src2}{Second source matrix. Must have the same size and type as \texttt{src1}}.
\cvarg{normType}{Norm type. \texttt{NORM\_L1}, \texttt{NORM\_L2} and \texttt{NORM\_INF} are supported for now.}
\end{description}

See also: \cvCppCross{norm}.


\cvCppFunc{gpu::sum}
Returns sum of matrix elements.

\cvdefCpp{Scalar sum(const GpuMat\& src);\newline
Scalar sum(const GpuMat\& src, GpuMat\& buf);}

\begin{description}
\cvarg{src}{Source image of any depth except \texttt{CV\_64F}.}
\cvarg{buf}{Optional buffer to avoid extra memory allocations. It's resized automatically.}
\end{description}

See also: \cvCppCross{sum}.


\cvCppFunc{gpu::absSum}
Returns sum of matrix elements absolute values.

\cvdefCpp{Scalar absSum(const GpuMat\& src);\newline
Scalar absSum(const GpuMat\& src, GpuMat\& buf);}

\begin{description}
\cvarg{src}{Source image of any depth except \texttt{CV\_64F}.}
\cvarg{buf}{Optional buffer to avoid extra memory allocations. It's resized automatically.}
\end{description}


\cvCppFunc{gpu::sqrSum}
Returns squared sum of matrix elements.

\cvdefCpp{Scalar sqrSum(const GpuMat\& src);\newline
Scalar sqrSum(const GpuMat\& src, GpuMat\& buf);}
\begin{description}
\cvarg{src}{Source image of any depth except \texttt{CV\_64F}.}
\cvarg{buf}{Optional buffer to avoid extra memory allocations. It's resized automatically.}
\end{description}


\cvCppFunc{gpu::minMax}
Finds global minimum and maximum matrix elements and returns their values.

\cvdefCpp{void minMax(const GpuMat\& src, double* minVal,\par
  double* maxVal=0, const GpuMat\& mask=GpuMat());\newline
void minMax(const GpuMat\& src, double* minVal, double* maxVal,\par
  const GpuMat\& mask, GpuMat\& buf);}
\begin{description}
\cvarg{src}{Single-channel source image.}
\cvarg{minVal}{Pointer to returned minimum value. \texttt{NULL} if not required.}
\cvarg{maxVal}{Pointer to returned maximum value. \texttt{NULL} if not required.}
\cvarg{mask}{Optional mask to select a sub-matrix. Please note the result is undefined in the case of empty mask.}
\cvarg{buf}{Optional buffer to avoid extra memory allocations. It's resized automatically.}
\end{description}

Function doesn't work with \texttt{CV\_64F} images on GPU with compute capability $<$ 1.3.\newline
See also: \cvCppCross{minMaxLoc}.


\cvCppFunc{gpu::minMaxLoc}
Finds global minimum and maximum matrix elements and returns their values with locations.

\cvdefCpp{void minMaxLoc(const GpuMat\& src, double\* minVal, double* maxVal=0,\par
  Point* minLoc=0, Point* maxLoc=0,\par
  const GpuMat\& mask=GpuMat());\newline
void minMaxLoc(const GpuMat\& src, double* minVal, double* maxVal,\par
  Point* minLoc, Point* maxLoc, const GpuMat\& mask,\par
  GpuMat\& valbuf, GpuMat\& locbuf);}
\begin{description}
\cvarg{src}{Single-channel source image.}
\cvarg{minVal}{Pointer to returned minimum value. \texttt{NULL} if not required.}
\cvarg{maxVal}{Pointer to returned maximum value. \texttt{NULL} if not required.}
\cvarg{minValLoc}{Pointer to returned minimum location. \texttt{NULL} if not required.}
\cvarg{maxValLoc}{Pointer to returned maximum location. \texttt{NULL} if not required.}
\cvarg{mask}{Optional mask to select a sub-matrix. Please note the result is undefined in the case of empty mask.}
\cvarg{valbuf}{Optional values buffer to avoid extra memory allocations. It's resized automatically.}
\cvarg{locbuf}{Optional locations buffer to avoid extra memory allocations. It's resized automatically.}
\end{description}

Function doesn't work with \texttt{CV\_64F} images on GPU with compute capability $<$ 1.3.\newline
See also: \cvCppCross{minMaxLoc}.


\cvCppFunc{gpu::countNonZero}
Counts non-zero matrix elements.

\cvdefCpp{int countNonZero(const GpuMat\& src);\newline
int countNonZero(const GpuMat\& src, GpuMat\& buf);}
\begin{description}
\cvarg{src}{Single-channel source image.}
\cvarg{buf}{Optional buffer to avoid extra memory allocations. It's resized automatically.}
\end{description}

Function doesn't work with \texttt{CV\_64F} images on GPU with compute capability $<$ 1.3.\newline
See also: \cvCppCross{countNonZero}.
