Skip to content

subtract

Core and matricesfunctionOpenCV 5.0.0
import { subtract } from '@banou/opencv-wasm'

Use after await initOpenCV(). See the initialization and named imports guide.

Calculates the per-element difference between two arrays or array and a scalar.

The function subtract calculates:

  • Difference between two arrays, when both input arrays have the same size and the same number of channels:
\texttt{dst}(I) =  \texttt{saturate} ( \texttt{src1}(I) -  \texttt{src2}(I)) \quad \texttt{if mask}(I) \ne0
  • Difference between an array and a scalar, when src2 is constructed from Scalar or has the same number of elements as src1.channels():
\texttt{dst}(I) =  \texttt{saturate} ( \texttt{src1}(I) -  \texttt{src2} ) \quad \texttt{if mask}(I) \ne0
  • Difference between a scalar and an array, when src1 is constructed from Scalar or has the same number of elements as src2.channels():
\texttt{dst}(I) =  \texttt{saturate} ( \texttt{src1} -  \texttt{src2}(I) ) \quad \texttt{if mask}(I) \ne0
  • The reverse difference between a scalar and an array in the case of SubRS:
\texttt{dst}(I) =  \texttt{saturate} ( \texttt{src2} -  \texttt{src1}(I) ) \quad \texttt{if mask}(I) \ne0

where I is a multi-dimensional index of array elements. In case of multi-channel arrays, each channel is processed independently.

The first function in the list above can be replaced with matrix expressions:

    dst = src1 - src2;
    dst -= src1; // equivalent to subtract(dst, src1, dst);

The input arrays and the output array can all have the same or different depths. For example, you can subtract to 8-bit unsigned arrays and store the difference in a 16-bit signed array. Depth of the output array is determined by dtype parameter. In the second and third cases above, as well as in the first case, when src1.depth() == src2.depth(), dtype can be set to the default -1. In this case the output array will have the same depth as the input array, be it src1, src2 or both.

Note: Saturation is not applied when the output array has the depth CV_32S. You may even get result of an incorrect sign in the case of overflow.

Note: (Python) Be careful to difference behaviour between src1/src2 are single number and they are tuple/array. subtract(src,X) means subtract(src,(X,X,X,X)). subtract(src,(X,)) means subtract(src,(X,0,0,0)).

See: add, addWeighted, scaleAdd, Mat::convertTo

subtract(src1: Mat, src2: Mat, dst: Mat, mask: Mat, dtype: number): void;
3 available overloads
subtract(src1: Mat, src2: Mat, dst: Mat): void;
subtract(src1: Mat, src2: Mat, dst: Mat, mask: Mat): void;
subtract(src1: Mat, src2: Mat, dst: Mat, mask: Mat, dtype: number): void;
src1

first input array or a scalar.

src2

second input array or a scalar.

dst

Output destination, filled by the native operation. output array of the same size and the same number of channels as the input array.

mask

optional operation mask; this is CV_8U, CV8S or CV_Bool single channel array that specifies elements of the output array to be changed.

dtype

optional depth of the output array

These signatures describe this package. Upstream documentation can mention optional backends that are absent from this build. Check runtime compatibility before choosing a backend or file format.