NAME
PDL::OpenCV - PDL interface to OpenCV
SYNOPSIS
use PDL::OpenCV::Videoio; # ucfirsted name of the OpenCV "module"
my $vfile='t/frames.avi';
my $vc = PDL::OpenCV::VideoCapture->new; # name of the OpenCV class
die "Failed to open $vfile" if !$vc->open($vfile);
my ($frame, $res) = $vc->read;
die "Failed to read" if !$res;
my $writer = PDL::OpenCV::VideoWriter->new;
# note 4th arg is an OpenCV "Size" - PDL upgrades array-ref to ndarray
$writer->open($outfile, PDL::OpenCV::VideoWriter::fourcc('M','P','4','V'), 20, [map $frame->dim($_), 1,2], 1);
while ($res) {
$writer->write($frame);
# and/or display it, or feed it to a Tracker, or...
($frame, $res) = $vc->read;
}
DESCRIPTION
Use PDL::OpenCV to call OpenCV functions on your data using Perl/PDL.
As can be seen above, this distribution is structured to very closely match the structure of OpenCV v4 itself. That means the submodules match the "classes" and/or "modules" in OpenCV, with the obvious exception of the Mat
class which needs special handling to thinly wrap ndarrays going into and coming back from OpenCV.
BINDING NOTES
This includes method/function names which are exactly the same as in OpenCV, without being modified for the common Perl idiom of snake_casing. This is intended to make the OpenCV documentation trivially easy to use for the PDL binding (where a binding exists), including available tutorials.
The API is generated from the Python bindings that are part of OpenCV. In imitation of that, you are not currently able, as with "normal" PDL functions, to pass in output ndarrays.
Where things do not work as you would expect from a PDL and/or OpenCV point of view, and it is not documented as doing so, this is a bug - please report it as shown at "BUGS" below.
Image formats
In PDL, images are often byte,3,x,y
or occasionally (e.g. in PDL::Graphics::Simple) byte,x,y,3
. The 3 is always R,G,B. Sometimes 4 is supported, in which case the 4th column will be an alpha (transparency) channel, or 1, which means the image is grayscale.
OpenCV has the concepts of "depth" and "channels".
"Depth" is bit-depth (and data type) per pixel and per channel: the bit-depth will be a multiple of 8, and the data type will be integer (signed or unsigned) or floating-point.
"Channels" resembles the above 1/3/4 point, with the important caveat that the default for OpenCV image-reading is to format data not as R,G,B, but B,G,R. This is for historical reasons, being the format returned by the cameras first used at the start of OpenCV. Use "cvtColor" in PDL::OpenCV::Imgproc if your application requires otherwise.
PDL data for use with OpenCV must be dimensioned (channels,x,y)
where channels
might be 1 if grayscale. This module will not use heuristics to guess what you meant if you only supply 2-dimensional data. This can lead to surprising results: e.g. with "EMD" in PDL::OpenCV::ImgProc, the two histogram inputs must be 3D, with a channels
of 1. From the relevant test:
my $a = pdl float, q[[1 1] [1 2] [0 3] [0 4] [1 5]];
my $b = pdl float, q[[0 1] [1 2] [0 3] [1 4]];
my ($flow,$res) = EMD($a->dummy(0),$b->dummy(0),DIST_L2);
If you get an exception Unrecognized or unsupported array type
, that is the cause.
Be careful when scaling byte-valued inputs to maximise dynamic range:
$frame = ($frame * (255/$max))->byte; # works
$frame = ($frame * 255/$max)->byte; # multiply happens first and overflows
OpenCV minor data-types
In OpenCV, as well as the most important type (Mat
), there are various helper types including Rect
, Size
, and Scalar
(often used for specifying colours). This distribution wraps these as ndarrays of appropriate types and dimensions.
While in C++ there are often default values for the constructors and/or polymorphic ways to call them with fewer than the full number of arguments, this is currently not possible in PDL. Therefore, e.g. with a Scalar
, you have to supply all four values (just give zeroes for the ones that don't matter, e.g. the alpha value for a colour on a non-alpha image).
Modules and packages
This distro reproduces the structure of OpenCV's various modules, so that e.g. the tracking
module is made available as PDL::OpenCV::Tracking. Loading that makes available the PDL::OpenCV::Tracker
package which has various methods like new
.
Constants
OpenCV defines various constants in its different modules. This distro will remove cv::
from the beginning of these, then put them in their loading module. E.g. in imgproc
, COLOR_GRAY2RGB
will be PDL::OpenCV::Imgproc::COLOR_GRAY2RGB
(and exported by default).
However, further-namespaced constants, like cv::Subdiv2D::PTLOC_VERTEX
, will not be exported, and will be available as e.g. PDL::OpenCV::Imgproc::Subdiv2D::PTLOC_VERTEX
.
FUNCTIONS
cubeRoot
Computes the cube root of an argument.
$res = cubeRoot($val);
The function cubeRoot computes \sqrt[3]{\texttt{val}}
. Negative arguments are handled correctly. NaN and Inf are not handled. The accuracy approaches the maximum possible accuracy for single-precision data.
Parameters:
- val
-
A function argument.
fastAtan2
Calculates the angle of a 2D vector in degrees.
$res = fastAtan2($y,$x);
The function fastAtan2 calculates the full-range angle of an input 2D vector. The angle is measured in degrees and varies from 0 to 360 degrees. The accuracy is about 0.3 degrees.
Parameters:
- x
-
x-coordinate of the vector.
- y
-
y-coordinate of the vector.
borderInterpolate
Computes the source location of an extrapolated pixel.
$res = borderInterpolate($p,$len,$borderType);
The function computes and returns the coordinate of a donor pixel corresponding to the specified extrapolated pixel when using the specified extrapolation border mode. For example, if you use cv::BORDER_WRAP mode in the horizontal direction, cv::BORDER_REFLECT_101 in the vertical direction and want to compute value of the "virtual" pixel Point(-5, 100) in a floating-point image img , it looks like:
{.cpp}
float val = img.at<float>(borderInterpolate(100, img.rows, cv::BORDER_REFLECT_101),
borderInterpolate(-5, img.cols, cv::BORDER_WRAP));
Normally, the function is not called directly. It is used inside filtering functions and also in copyMakeBorder. \<0 or \>= len
Parameters:
- p
-
0-based coordinate of the extrapolated pixel along one of the axes, likely
- len
-
Length of the array along the corresponding axis.
- borderType
-
Border type, one of the #BorderTypes, except for #BORDER_TRANSPARENT and #BORDER_ISOLATED . When borderType==#BORDER_CONSTANT , the function always returns -1, regardless of p and len.
See also: copyMakeBorder
copyMakeBorder
Signature: ([phys] src(l1,c1,r1); [o,phys] dst(l2,c2,r2); int [phys] top(); int [phys] bottom(); int [phys] left(); int [phys] right(); int [phys] borderType(); double [phys] value(n8))
Forms a border around an image. NO BROADCASTING.
$dst = copyMakeBorder($src,$top,$bottom,$left,$right,$borderType); # with defaults
$dst = copyMakeBorder($src,$top,$bottom,$left,$right,$borderType,$value);
The function copies the source image into the middle of the destination image. The areas to the left, to the right, above and below the copied source image will be filled with extrapolated pixels. This is not what filtering functions based on it do (they extrapolate pixels on-fly), but what other more complex functions, including your own, may do to simplify image boundary handling. The function supports the mode when src is already in the middle of dst . In this case, the function does not copy src itself but simply constructs the border, for example:
{.cpp}
// let border be the same in all directions
int border=2;
// constructs a larger image to fit both the image and the border
Mat gray_buf(rgb.rows + border*2, rgb.cols + border*2, rgb.depth());
// select the middle part of it w/o copying data
Mat gray(gray_canvas, Rect(border, border, rgb.cols, rgb.rows));
// convert image from RGB to grayscale
cvtColor(rgb, gray, COLOR_RGB2GRAY);
// form a border in-place
copyMakeBorder(gray, gray_buf, border, border,
border, border, BORDER_REPLICATE);
// now do some custom filtering ...
...
@note When the source image is a part (ROI) of a bigger image, the function will try to use the pixels outside of the ROI to form a border. To disable this feature and always do extrapolation, as if src was not a ROI, use borderType | #BORDER_ISOLATED.
Parameters:
- src
-
Source image.
- dst
-
Destination image of the same type as src and the size Size(src.cols+left+right, src.rows+top+bottom) .
- top
-
the top pixels
- bottom
-
the bottom pixels
- left
-
the left pixels
- right
-
Parameter specifying how many 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.
- borderType
-
Border type. See borderInterpolate for details.
- value
-
Border value if borderType==BORDER_CONSTANT .
See also: borderInterpolate
copyMakeBorder ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
add
Signature: ([phys] src1(l1,c1,r1); [phys] src2(l2,c2,r2); [o,phys] dst(l3,c3,r3); [phys] mask(l4,c4,r4); int [phys] dtype())
Calculates the per-element sum of two arrays or an array and a scalar. NO BROADCASTING.
$dst = add($src1,$src2); # with defaults
$dst = add($src1,$src2,$mask,$dtype);
The function add calculates: =over =back The first function in the list above can be replaced with matrix expressions:
{.cpp}
dst = src1 + src2;
dst += src1; // equivalent to add(dst, src1, dst);
The input arrays and the output array can all have the same or different depths. For example, you can add a 16-bit unsigned array to a 8-bit signed array and store the sum as a 32-bit floating-point array. Depth of the output array is determined by the 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.
Parameters:
- src1
-
first input array or a scalar.
- src2
-
second input array or a scalar.
- dst
-
output array that has the same size and number of channels as the input array(s); the depth is defined by dtype or src1/src2.
- mask
-
optional operation mask - 8-bit single channel array, that specifies elements of the output array to be changed.
- dtype
-
optional depth of the output array (see the discussion below).
See also: subtract, addWeighted, scaleAdd, Mat::convertTo
add ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
subtract
Signature: ([phys] src1(l1,c1,r1); [phys] src2(l2,c2,r2); [o,phys] dst(l3,c3,r3); [phys] mask(l4,c4,r4); int [phys] dtype())
Calculates the per-element difference between two arrays or array and a scalar. NO BROADCASTING.
$dst = subtract($src1,$src2); # with defaults
$dst = subtract($src1,$src2,$mask,$dtype);
The function subtract calculates: =over =back The first function in the list above can be replaced with matrix expressions:
{.cpp}
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.
Parameters:
- src1
-
first input array or a scalar.
- src2
-
second input array or a scalar.
- dst
-
output array of the same size and the same number of channels as the input array.
- mask
-
optional operation mask; this is an 8-bit single channel array that specifies elements of the output array to be changed.
- dtype
-
optional depth of the output array
See also: add, addWeighted, scaleAdd, Mat::convertTo
subtract ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
multiply
Signature: ([phys] src1(l1,c1,r1); [phys] src2(l2,c2,r2); [o,phys] dst(l3,c3,r3); double [phys] scale(); int [phys] dtype())
Calculates the per-element scaled product of two arrays. NO BROADCASTING.
$dst = multiply($src1,$src2); # with defaults
$dst = multiply($src1,$src2,$scale,$dtype);
The function multiply calculates the per-element product of two arrays: \f[\texttt{dst} (I)= \texttt{saturate} ( \texttt{scale} \cdot \texttt{src1} (I) \cdot \texttt{src2} (I))\f] There is also a @ref MatrixExpressions -friendly variant of the first function. See Mat::mul . For a not-per-element matrix product, see gemm . @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.
Parameters:
- src1
-
first input array.
- src2
-
second input array of the same size and the same type as src1.
- dst
-
output array of the same size and type as src1.
- scale
-
optional scale factor.
- dtype
-
optional depth of the output array
See also: add, subtract, divide, scaleAdd, addWeighted, accumulate, accumulateProduct, accumulateSquare, Mat::convertTo
multiply ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
divide
Signature: ([phys] src1(l1,c1,r1); [phys] src2(l2,c2,r2); [o,phys] dst(l3,c3,r3); double [phys] scale(); int [phys] dtype())
Performs per-element division of two arrays or a scalar by an array. NO BROADCASTING.
$dst = divide($src1,$src2); # with defaults
$dst = divide($src1,$src2,$scale,$dtype);
The function cv::divide divides one array by another: \f[\texttt{dst(I) = saturate(src1(I)*scale/src2(I))}\f] or a scalar by an array when there is no src1 : \f[\texttt{dst(I) = saturate(scale/src2(I))}\f] Different channels of multi-channel arrays are processed independently. For integer types when src2(I) is zero, dst(I) will also be zero. @note In case of floating point data there is no special defined behavior for zero src2(I) values. Regular floating-point division is used. Expect correct IEEE-754 behaviour for floating-point data (with NaN, Inf result values). @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.
Parameters:
- src1
-
first input array.
- src2
-
second input array of the same size and type as src1.
- scale
-
scalar factor.
- dst
-
output array of the same size and type as src2.
- dtype
-
optional depth of the output array; if -1, dst will have depth src2.depth(), but in case of an array-by-array division, you can only pass -1 when src1.depth()==src2.depth().
See also: multiply, add, subtract
divide ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
divide2
Signature: (double [phys] scale(); [phys] src2(l2,c2,r2); [o,phys] dst(l3,c3,r3); int [phys] dtype())
NO BROADCASTING.
$dst = divide2($scale,$src2); # with defaults
$dst = divide2($scale,$src2,$dtype);
@overload
divide2 ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
scaleAdd
Signature: ([phys] src1(l1,c1,r1); double [phys] alpha(); [phys] src2(l3,c3,r3); [o,phys] dst(l4,c4,r4))
Calculates the sum of a scaled array and another array. NO BROADCASTING.
$dst = scaleAdd($src1,$alpha,$src2);
The function scaleAdd is one of the classical primitive linear algebra operations, known as DAXPY or SAXPY in [BLAS](http://en.wikipedia.org/wiki/Basic_Linear_Algebra_Subprograms). It calculates the sum of a scaled array and another array: \f[\texttt{dst} (I)= \texttt{scale} \cdot \texttt{src1} (I) + \texttt{src2} (I)\f] The function can also be emulated with a matrix expression, for example:
{.cpp}
Mat A(3, 3, CV_64F);
...
A.row(0) = A.row(1)*2 + A.row(2);
Parameters:
- src1
-
first input array.
- alpha
-
scale factor for the first array.
- src2
-
second input array of the same size and type as src1.
- dst
-
output array of the same size and type as src1.
See also: add, addWeighted, subtract, Mat::dot, Mat::convertTo
scaleAdd ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
addWeighted
Signature: ([phys] src1(l1,c1,r1); double [phys] alpha(); [phys] src2(l3,c3,r3); double [phys] beta(); double [phys] gamma(); [o,phys] dst(l6,c6,r6); int [phys] dtype())
Calculates the weighted sum of two arrays. NO BROADCASTING.
$dst = addWeighted($src1,$alpha,$src2,$beta,$gamma); # with defaults
$dst = addWeighted($src1,$alpha,$src2,$beta,$gamma,$dtype);
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. The function can be replaced with a matrix expression:
{.cpp}
dst = src1*alpha + src2*beta + gamma;
@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.
Parameters:
- src1
-
first input array.
- alpha
-
weight of the first array elements.
- src2
-
second input array of the same size and channel number as src1.
- beta
-
weight of the second array elements.
- gamma
-
scalar added to each sum.
- dst
-
output array that has the same size and number of channels as the input arrays.
- dtype
-
optional depth of the output array; when both input arrays have the same depth, dtype can be set to -1, which will be equivalent to src1.depth().
See also: add, subtract, scaleAdd, Mat::convertTo
addWeighted ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
convertScaleAbs
Signature: ([phys] src(l1,c1,r1); [o,phys] dst(l2,c2,r2); double [phys] alpha(); double [phys] beta())
Scales, calculates absolute values, and converts the result to 8-bit. NO BROADCASTING.
$dst = convertScaleAbs($src); # with defaults
$dst = convertScaleAbs($src,$alpha,$beta);
On each element of the input array, the function convertScaleAbs performs three operations sequentially: scaling, taking an absolute value, conversion to an unsigned 8-bit type: \f[\texttt{dst} (I)= \texttt{saturate\_cast<uchar>} (| \texttt{src} (I)* \texttt{alpha} + \texttt{beta} |)\f] In case of multi-channel arrays, the function processes each channel independently. When the output is not 8-bit, the operation can be emulated by calling the Mat::convertTo method (or by using matrix expressions) and then by calculating an absolute value of the result. For example:
{.cpp}
Mat_<float> A(30,30);
randu(A, Scalar(-100), Scalar(100));
Mat_<float> B = A*5 + 3;
B = abs(B);
// Mat_<float> B = abs(A*5+3) will also do the job,
// but it will allocate a temporary matrix
Parameters:
- src
-
input array.
- dst
-
output array.
- alpha
-
optional scale factor.
- beta
-
optional delta added to the scaled values.
See also: Mat::convertTo, cv::abs(const Mat&)
convertScaleAbs ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
convertFp16
Signature: ([phys] src(l1,c1,r1); [o,phys] dst(l2,c2,r2))
Converts an array to half precision floating number. NO BROADCASTING.
$dst = convertFp16($src);
This function converts FP32 (single precision floating point) from/to FP16 (half precision floating point). CV_16S format is used to represent FP16 data. There are two use modes (src -> dst): CV_32F -> CV_16S and CV_16S -> CV_32F. The input array has to have type of CV_32F or CV_16S to represent the bit depth. If the input array is neither of them, the function will raise an error. The format of half precision floating point is defined in IEEE 754-2008.
Parameters:
- src
-
input array.
- dst
-
output array.
convertFp16 ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
LUT
Signature: ([phys] src(l1,c1,r1); [phys] lut(l2,c2,r2); [o,phys] dst(l3,c3,r3))
Performs a look-up table transform of an array. NO BROADCASTING.
$dst = LUT($src,$lut);
The function LUT fills the output array with values from the look-up table. Indices of the entries are taken from the input array. That is, the function processes each element of src as follows: \f[\texttt{dst} (I) \leftarrow \texttt{lut(src(I) + d)}\f] where \f[d = \fork{0}{if \(\texttt{src}\) has depth \(\texttt{CV_8U}\)}{128}{if \(\texttt{src}\) has depth \(\texttt{CV_8S}\)}\f]
Parameters:
- src
-
input array of 8-bit elements.
- lut
-
look-up table of 256 elements; in case of multi-channel input array, the table should either have a single channel (in this case the same table is used for all channels) or the same number of channels as in the input array.
- dst
-
output array of the same size and number of channels as src, and the same depth as lut.
See also: convertScaleAbs, Mat::convertTo
LUT ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
sumElems
Signature: ([phys] src(l1,c1,r1); double [o,phys] res(n2=4))
Calculates the sum of array elements.
$res = sumElems($src);
The function cv::sum calculates and returns the sum of array elements, independently for each channel.
Parameters:
- src
-
input array that must have from 1 to 4 channels.
See also: countNonZero, mean, meanStdDev, norm, minMaxLoc, reduce
sumElems ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
countNonZero
Signature: ([phys] src(l1,c1,r1); int [o,phys] res())
Counts non-zero array elements.
$res = countNonZero($src);
The function returns the number of non-zero elements in src : \f[\sum _{I: \; \texttt{src} (I) \ne0 } 1\f]
Parameters:
- src
-
single-channel array.
See also: mean, meanStdDev, norm, minMaxLoc, calcCovarMatrix
countNonZero ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
findNonZero
Signature: ([phys] src(l1,c1,r1); [o,phys] idx(l2,c2,r2))
Returns the list of locations of non-zero pixels NO BROADCASTING.
$idx = findNonZero($src);
Given a binary matrix (likely returned from an operation such as threshold(), compare(), >, ==, etc, return all of the non-zero indices as a cv::Mat or std::vector<cv::Point> (x,y) For example:
{.cpp}
cv::Mat binaryImage; // input, binary image
cv::Mat locations; // output, locations of non-zero pixels
cv::findNonZero(binaryImage, locations);
// access pixel coordinates
Point pnt = locations.at<Point>(i);
or
{.cpp}
cv::Mat binaryImage; // input, binary image
vector<Point> locations; // output, locations of non-zero pixels
cv::findNonZero(binaryImage, locations);
// access pixel coordinates
Point pnt = locations[i];
Parameters:
- src
-
single-channel array
- idx
-
the output array, type of cv::Mat or std::vector<Point>, corresponding to non-zero indices in the input
findNonZero ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
mean
Signature: ([phys] src(l1,c1,r1); [phys] mask(l2,c2,r2); double [o,phys] res(n3=4))
Calculates an average (mean) of array elements.
$res = mean($src); # with defaults
$res = mean($src,$mask);
The function cv::mean calculates the mean value M of array elements, independently for each channel, and return it: \f[\begin{array}{l} N = \sum _{I: \; \texttt{mask} (I) \ne 0} 1 \\ M_c = \left ( \sum _{I: \; \texttt{mask} (I) \ne 0}{ \texttt{mtx} (I)_c} \right )/N \end{array}\f] When all the mask elements are 0's, the function returns Scalar::all(0)
Parameters:
- src
-
input array that should have from 1 to 4 channels so that the result can be stored in Scalar_ .
- mask
-
optional operation mask.
See also: countNonZero, meanStdDev, norm, minMaxLoc
mean ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
meanStdDev
Signature: ([phys] src(l1,c1,r1); [o,phys] mean(l2,c2,r2); [o,phys] stddev(l3,c3,r3); [phys] mask(l4,c4,r4))
NO BROADCASTING.
($mean,$stddev) = meanStdDev($src); # with defaults
($mean,$stddev) = meanStdDev($src,$mask);
Calculates a mean and standard deviation of array elements. The function cv::meanStdDev calculates the mean and the standard deviation M of array elements independently for each channel and returns it via the output parameters: \f[\begin{array}{l} N = \sum _{I, \texttt{mask} (I) \ne 0} 1 \\ \texttt{mean} _c = \frac{\sum_{ I: \; \texttt{mask}(I) \ne 0} \texttt{src} (I)_c}{N} \\ \texttt{stddev} _c = \sqrt{\frac{\sum_{ I: \; \texttt{mask}(I) \ne 0} \left ( \texttt{src} (I)_c - \texttt{mean} _c \right )^2}{N}} \end{array}\f] When all the mask elements are 0's, the function returns mean=stddev=Scalar::all(0). @note The calculated standard deviation is only the diagonal of the complete normalized covariance matrix. If the full matrix is needed, you can reshape the multi-channel array M x N to the single-channel array M*N x mtx.channels() (only possible when the matrix is continuous) and then pass the matrix to calcCovarMatrix .
Parameters:
- src
-
input array that should have from 1 to 4 channels so that the results can be stored in Scalar_ 's.
- mean
-
output parameter: calculated mean value.
- stddev
-
output parameter: calculated standard deviation.
- mask
-
optional operation mask.
See also: countNonZero, mean, norm, minMaxLoc, calcCovarMatrix
meanStdDev ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
norm
Signature: ([phys] src1(l1,c1,r1); int [phys] normType(); [phys] mask(l3,c3,r3); double [o,phys] res())
Calculates the absolute norm of an array.
$res = norm($src1); # with defaults
$res = norm($src1,$normType,$mask);
This version of #norm calculates the absolute norm of src1. The type of norm to calculate is specified using #NormTypes. As example for one array consider the function r(x)= \begin{pmatrix} x \\ 1-x \end{pmatrix}, x \in [-1;1]
. The L_{1}, L_{2}
and L_{\infty}
norm for the sample value r(-1) = \begin{pmatrix} -1 \\ 2 \end{pmatrix}
is calculated as follows \f{align*} \| r(-1) \|_{L_1} &= |-1| + |2| = 3 \\ \| r(-1) \|_{L_2} &= \sqrt{(-1)^{2} + (2)^{2}} = \sqrt{5} \\ \| r(-1) \|_{L_\infty} &= \max(|-1|,|2|) = 2 \f} and for r(0.5) = \begin{pmatrix} 0.5 \\ 0.5 \end{pmatrix}
the calculation is \f{align*} \| r(0.5) \|_{L_1} &= |0.5| + |0.5| = 1 \\ \| r(0.5) \|_{L_2} &= \sqrt{(0.5)^{2} + (0.5)^{2}} = \sqrt{0.5} \\ \| r(0.5) \|_{L_\infty} &= \max(|0.5|,|0.5|) = 0.5. \f} The following graphic shows all values for the three norm functions \| r(x) \|_{L_1}, \| r(x) \|_{L_2}
and \| r(x) \|_{L_\infty}
. It is notable that the L_{1}
norm forms the upper and the L_{\infty}
norm forms the lower border for the example function r(x)
. ![Graphs for the different norm functions from the above example](pics/NormTypes_OneArray_1-2-INF.png) When the mask parameter is specified and it is not empty, the norm is If normType is not specified, #NORM_L2 is used. calculated only over the region specified by the mask. Multi-channel input arrays are treated as single-channel arrays, that is, the results for all channels are combined. Hamming norms can only be calculated with CV_8U depth arrays.
Parameters:
- src1
-
first input array.
- normType
-
type of the norm (see #NormTypes).
- mask
-
optional operation mask; it must have the same size as src1 and CV_8UC1 type.
norm ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
norm2
Signature: ([phys] src1(l1,c1,r1); [phys] src2(l2,c2,r2); int [phys] normType(); [phys] mask(l4,c4,r4); double [o,phys] res())
Calculates an absolute difference norm or a relative difference norm.
$res = norm2($src1,$src2); # with defaults
$res = norm2($src1,$src2,$normType,$mask);
This version of cv::norm calculates the absolute difference norm or the relative difference norm of arrays src1 and src2. The type of norm to calculate is specified using #NormTypes.
Parameters:
- src1
-
first input array.
- src2
-
second input array of the same size and the same type as src1.
- normType
-
type of the norm (see #NormTypes).
- mask
-
optional operation mask; it must have the same size as src1 and CV_8UC1 type.
norm2 ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
PSNR
Signature: ([phys] src1(l1,c1,r1); [phys] src2(l2,c2,r2); double [phys] R(); double [o,phys] res())
Computes the Peak Signal-to-Noise Ratio (PSNR) image quality metric.
$res = PSNR($src1,$src2); # with defaults
$res = PSNR($src1,$src2,$R);
This function calculates the Peak Signal-to-Noise Ratio (PSNR) image quality metric in decibels (dB), between two input arrays src1 and src2. The arrays must have the same type. The PSNR is calculated as follows: \f[ \texttt{PSNR} = 10 \cdot \log_{10}{\left( \frac{R^2}{MSE} \right) } \f] where R is the maximum integer value of depth (e.g. 255 in the case of CV_8U data) and MSE is the mean squared error between the two arrays.
Parameters:
- src1
-
first input array.
- src2
-
second input array of the same size as src1.
- R
-
the maximum pixel value (255 by default)
PSNR ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
batchDistance
Signature: ([phys] src1(l1,c1,r1); [phys] src2(l2,c2,r2); [o,phys] dist(l3,c3,r3); int [phys] dtype(); [o,phys] nidx(l5,c5,r5); int [phys] normType(); int [phys] K(); [phys] mask(l8,c8,r8); int [phys] update(); byte [phys] crosscheck())
naive nearest neighbor finder NO BROADCASTING.
($dist,$nidx) = batchDistance($src1,$src2,$dtype); # with defaults
($dist,$nidx) = batchDistance($src1,$src2,$dtype,$normType,$K,$mask,$update,$crosscheck);
see http://en.wikipedia.org/wiki/Nearest_neighbor_search @todo document
batchDistance ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
normalize
Signature: ([phys] src(l1,c1,r1); [io,phys] dst(l2,c2,r2); double [phys] alpha(); double [phys] beta(); int [phys] norm_type(); int [phys] dtype(); [phys] mask(l7,c7,r7))
Normalizes the norm or value range of an array.
normalize($src,$dst); # with defaults
normalize($src,$dst,$alpha,$beta,$norm_type,$dtype,$mask);
The function cv::normalize normalizes scale and shift the input array elements so that \f[\| \texttt{dst} \| _{L_p}= \texttt{alpha}\f] (where p=Inf, 1 or 2) when normType=NORM_INF, NORM_L1, or NORM_L2, respectively; or so that \f[\min _I \texttt{dst} (I)= \texttt{alpha} , \, \, \max _I \texttt{dst} (I)= \texttt{beta}\f] when normType=NORM_MINMAX (for dense arrays only). The optional mask specifies a sub-array to be normalized. This means that the norm or min-n-max are calculated over the sub-array, and then this sub-array is modified to be normalized. If you want to only use the mask to calculate the norm or min-max but modify the whole array, you can use norm and Mat::convertTo. In case of sparse matrices, only the non-zero values are analyzed and transformed. Because of this, the range transformation for sparse matrices is not allowed since it can shift the zero level. Possible usage with some positive example data:
{.cpp}
vector<double> positiveData = { 2.0, 8.0, 10.0 };
vector<double> normalizedData_l1, normalizedData_l2, normalizedData_inf, normalizedData_minmax;
// Norm to probability (total count)
// sum(numbers) = 20.0
// 2.0 0.1 (2.0/20.0)
// 8.0 0.4 (8.0/20.0)
// 10.0 0.5 (10.0/20.0)
normalize(positiveData, normalizedData_l1, 1.0, 0.0, NORM_L1);
// Norm to unit vector: ||positiveData|| = 1.0
// 2.0 0.15
// 8.0 0.62
// 10.0 0.77
normalize(positiveData, normalizedData_l2, 1.0, 0.0, NORM_L2);
// Norm to max element
// 2.0 0.2 (2.0/10.0)
// 8.0 0.8 (8.0/10.0)
// 10.0 1.0 (10.0/10.0)
normalize(positiveData, normalizedData_inf, 1.0, 0.0, NORM_INF);
// Norm to range [0.0;1.0]
// 2.0 0.0 (shift to left border)
// 8.0 0.75 (6.0/8.0)
// 10.0 1.0 (shift to right border)
normalize(positiveData, normalizedData_minmax, 1.0, 0.0, NORM_MINMAX);
Parameters:
- src
-
input array.
- dst
-
output array of the same size as src .
- alpha
-
norm value to normalize to or the lower range boundary in case of the range normalization.
- beta
-
upper range boundary in case of the range normalization; it is not used for the norm normalization.
- norm_type
-
normalization type (see cv::NormTypes).
- 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).
- mask
-
optional operation mask.
See also: norm, Mat::convertTo, SparseMat::convertTo
normalize ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
minMaxLoc
Signature: ([phys] src(l1,c1,r1); double [o,phys] minVal(); double [o,phys] maxVal(); indx [o,phys] minLoc(n4=2); indx [o,phys] maxLoc(n5=2); [phys] mask(l6,c6,r6))
Finds the global minimum and maximum in an array.
($minVal,$maxVal,$minLoc,$maxLoc) = minMaxLoc($src); # with defaults
($minVal,$maxVal,$minLoc,$maxLoc) = minMaxLoc($src,$mask);
The function cv::minMaxLoc finds the minimum and maximum element values and their positions. The extremums are searched across the whole array or, if mask is not an empty array, in the specified array region. The function do not work with multi-channel arrays. If you need to find minimum or maximum elements across all the channels, use Mat::reshape first to reinterpret the array as single-channel. Or you may extract the particular channel using either extractImageCOI , or mixChannels , or split .
Parameters:
- src
-
input single-channel array.
- minVal
-
pointer to the returned minimum value; NULL is used if not required.
- maxVal
-
pointer to the returned maximum value; NULL is used if not required.
- minLoc
-
pointer to the returned minimum location (in 2D case); NULL is used if not required.
- maxLoc
-
pointer to the returned maximum location (in 2D case); NULL is used if not required.
- mask
-
optional mask used to select a sub-array.
See also: max, min, compare, inRange, extractImageCOI, mixChannels, split, Mat::reshape
minMaxLoc ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
reduce
Signature: ([phys] src(l1,c1,r1); [o,phys] dst(l2,c2,r2); int [phys] dim(); int [phys] rtype(); int [phys] dtype())
Reduces a matrix to a vector. NO BROADCASTING.
$dst = reduce($src,$dim,$rtype); # with defaults
$dst = reduce($src,$dim,$rtype,$dtype);
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 #REDUCE_MAX and #REDUCE_MIN , the output image should have the same type as the source one. In case of #REDUCE_SUM and #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. The following code demonstrates its usage for a single channel matrix. @snippet snippets/core_reduce.cpp example And the following code demonstrates its usage for a two-channel matrix. @snippet snippets/core_reduce.cpp example2
Parameters:
- src
-
input 2D matrix.
- dst
-
output vector. Its size and type is defined by dim and dtype parameters.
- 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.
- rtype
-
reduction operation that could be one of #ReduceTypes
- dtype
-
when negative, the output vector will have the same type as the input matrix, otherwise, its type will be CV_MAKE_TYPE(CV_MAT_DEPTH(dtype), src.channels()).
See also: repeat
reduce ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
merge
Signature: ([o,phys] dst(l2,c2,r2); vector_MatWrapper * mv)
NO BROADCASTING.
$dst = merge($mv);
@overload
Parameters:
- mv
-
input vector of matrices to be merged; all the matrices in mv must have the same size and the same depth.
- dst
-
output array of the same size and the same depth as mv[0]; The number of channels will be the total number of channels in the matrix array.
merge ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
split
Signature: ([phys] m(l1,c1,r1); [o] vector_MatWrapper * mv)
$mv = split($m);
@overload
Parameters:
- m
-
input multi-channel array.
- mv
-
output vector of arrays; the arrays themselves are reallocated, if needed.
split ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
mixChannels
Signature: (int [phys] fromTo(n3d0); vector_MatWrapper * src; [o] vector_MatWrapper * dst)
mixChannels($src,$dst,$fromTo);
@overload *2] is a 0-based index of the input channel in src, fromTo[k*2+1] is an index of the output channel in dst; the continuous channel numbering is used: the first input image channels are indexed from 0 to src[0].channels()-1, the second input image channels are indexed from src[0].channels() to src[0].channels() + src[1].channels()-1, and so on, the same scheme is used for the output image channels; as a special case, when fromTo[k*2] is negative, the corresponding output channel is filled with zero .
Parameters:
- src
-
input array or vector of matrices; all of the matrices must have the same size and the same depth.
- dst
-
output array or vector of matrices; all the matrices **must be allocated**; their size and depth must be the same as in src[0].
- fromTo
-
array of index pairs specifying which channels are copied and where; fromTo[k
mixChannels ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
extractChannel
Signature: ([phys] src(l1,c1,r1); [o,phys] dst(l2,c2,r2); int [phys] coi())
Extracts a single channel from src (coi is 0-based index) NO BROADCASTING.
$dst = extractChannel($src,$coi);
Parameters:
- src
-
input array
- dst
-
output array
- coi
-
index of channel to extract
See also: mixChannels, split
extractChannel ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
insertChannel
Signature: ([phys] src(l1,c1,r1); [io,phys] dst(l2,c2,r2); int [phys] coi())
Inserts a single channel to dst (coi is 0-based index)
insertChannel($src,$dst,$coi);
Parameters:
- src
-
input array
- dst
-
output array
- coi
-
index of channel for insertion
See also: mixChannels, merge
insertChannel ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
flip
Signature: ([phys] src(l1,c1,r1); [o,phys] dst(l2,c2,r2); int [phys] flipCode())
Flips a 2D array around vertical, horizontal, or both axes. NO BROADCASTING.
$dst = flip($src,$flipCode);
The function cv::flip flips the array in one of three different ways (row and column indices are 0-based): \f[\texttt{dst} _{ij} = \left\{ \begin{array}{l l} \texttt{src} _{\texttt{src.rows}-i-1,j} & if\; \texttt{flipCode} = 0 \\ \texttt{src} _{i, \texttt{src.cols} -j-1} & if\; \texttt{flipCode} > 0 \\ \texttt{src} _{ \texttt{src.rows} -i-1, \texttt{src.cols} -j-1} & if\; \texttt{flipCode} < 0 \\ \end{array} \right.\f] The example scenarios of using the function are the following: * Vertical flipping of the image (flipCode == 0) to switch between top-left and bottom-left image origin. This is a typical operation in video processing on Microsoft Windows* OS. * Horizontal flipping of the image with the subsequent horizontal shift and absolute difference calculation to check for a vertical-axis symmetry (flipCode \> 0). * Simultaneous horizontal and vertical flipping of the image with the subsequent shift and absolute difference calculation to check for a central symmetry (flipCode \< 0). * Reversing the order of point arrays (flipCode \> 0 or flipCode == 0).
Parameters:
- src
-
input array.
- dst
-
output array of the same size and type as src.
- flipCode
-
a flag to specify how to flip the array; 0 means flipping around the x-axis and positive value (for example, 1) means flipping around y-axis. Negative value (for example, -1) means flipping around both axes.
See also: transpose , repeat , completeSymm
flip ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
rotate
Signature: ([phys] src(l1,c1,r1); [o,phys] dst(l2,c2,r2); int [phys] rotateCode())
Rotates a 2D array in multiples of 90 degrees. The function cv::rotate rotates the array in one of three different ways: * Rotate by 90 degrees clockwise (rotateCode = ROTATE_90_CLOCKWISE). * Rotate by 180 degrees clockwise (rotateCode = ROTATE_180). * Rotate by 270 degrees clockwise (rotateCode = ROTATE_90_COUNTERCLOCKWISE). NO BROADCASTING.
$dst = rotate($src,$rotateCode);
Parameters:
- src
-
input array.
- dst
-
output array of the same type as src. The size is the same with ROTATE_180, and the rows and cols are switched for ROTATE_90_CLOCKWISE and ROTATE_90_COUNTERCLOCKWISE.
- rotateCode
-
an enum to specify how to rotate the array; see the enum #RotateFlags
See also: transpose , repeat , completeSymm, flip, RotateFlags
rotate ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
repeat
Signature: ([phys] src(l1,c1,r1); int [phys] ny(); int [phys] nx(); [o,phys] dst(l4,c4,r4))
Fills the output array with repeated copies of the input array. NO BROADCASTING.
$dst = repeat($src,$ny,$nx);
The function cv::repeat duplicates the input array one or more times along each of the two axes: \f[\texttt{dst} _{ij}= \texttt{src} _{i\mod src.rows, \; j\mod src.cols }\f] The second variant of the function is more convenient to use with @ref MatrixExpressions.
Parameters:
- src
-
input array to replicate.
- ny
-
Flag to specify how many times the `src` is repeated along the vertical axis.
- nx
-
Flag to specify how many times the `src` is repeated along the horizontal axis.
- dst
-
output array of the same type as `src`.
See also: cv::reduce
repeat ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
hconcat
Signature: ([o,phys] dst(l2,c2,r2); vector_MatWrapper * src)
NO BROADCASTING.
$dst = hconcat($src);
@overload
{.cpp}
std::vector<cv::Mat> matrices = { cv::Mat(4, 1, CV_8UC1, cv::Scalar(1)),
cv::Mat(4, 1, CV_8UC1, cv::Scalar(2)),
cv::Mat(4, 1, CV_8UC1, cv::Scalar(3)),};
cv::Mat out;
cv::hconcat( matrices, out );
//out:
//[1, 2, 3;
// 1, 2, 3;
// 1, 2, 3;
// 1, 2, 3]
Parameters:
- src
-
input array or vector of matrices. all of the matrices must have the same number of rows and the same depth.
- dst
-
output array. It has the same number of rows and depth as the src, and the sum of cols of the src. same depth.
hconcat ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
vconcat
Signature: ([o,phys] dst(l2,c2,r2); vector_MatWrapper * src)
NO BROADCASTING.
$dst = vconcat($src);
@overload
{.cpp}
std::vector<cv::Mat> matrices = { cv::Mat(1, 4, CV_8UC1, cv::Scalar(1)),
cv::Mat(1, 4, CV_8UC1, cv::Scalar(2)),
cv::Mat(1, 4, CV_8UC1, cv::Scalar(3)),};
cv::Mat out;
cv::vconcat( matrices, out );
//out:
//[1, 1, 1, 1;
// 2, 2, 2, 2;
// 3, 3, 3, 3]
Parameters:
- src
-
input array or vector of matrices. all of the matrices must have the same number of cols and the same depth
- dst
-
output array. It has the same number of cols and depth as the src, and the sum of rows of the src. same depth.
vconcat ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
bitwise_and
Signature: ([phys] src1(l1,c1,r1); [phys] src2(l2,c2,r2); [o,phys] dst(l3,c3,r3); [phys] mask(l4,c4,r4))
computes bitwise conjunction of the two arrays (dst = src1 & src2) Calculates the per-element bit-wise conjunction of two arrays or an array and a scalar. NO BROADCASTING.
$dst = bitwise_and($src1,$src2); # with defaults
$dst = bitwise_and($src1,$src2,$mask);
The function cv::bitwise_and calculates the per-element bit-wise logical conjunction for: * Two arrays when src1 and src2 have the same size: \f[\texttt{dst} (I) = \texttt{src1} (I) \wedge \texttt{src2} (I) \quad \texttt{if mask} (I) \ne0\f] * An array and a scalar when src2 is constructed from Scalar or has the same number of elements as `src1.channels()`: \f[\texttt{dst} (I) = \texttt{src1} (I) \wedge \texttt{src2} \quad \texttt{if mask} (I) \ne0\f] * A scalar and an array when src1 is constructed from Scalar or has the same number of elements as `src2.channels()`: \f[\texttt{dst} (I) = \texttt{src1} \wedge \texttt{src2} (I) \quad \texttt{if mask} (I) \ne0\f] In case of floating-point arrays, their machine-specific bit representations (usually IEEE754-compliant) are used for the operation. In case of multi-channel arrays, each channel is processed independently. In the second and third cases above, the scalar is first converted to the array type.
Parameters:
- src1
-
first input array or a scalar.
- src2
-
second input array or a scalar.
- dst
-
output array that has the same size and type as the input arrays.
- mask
-
optional operation mask, 8-bit single channel array, that specifies elements of the output array to be changed.
bitwise_and ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
bitwise_or
Signature: ([phys] src1(l1,c1,r1); [phys] src2(l2,c2,r2); [o,phys] dst(l3,c3,r3); [phys] mask(l4,c4,r4))
Calculates the per-element bit-wise disjunction of two arrays or an array and a scalar. NO BROADCASTING.
$dst = bitwise_or($src1,$src2); # with defaults
$dst = bitwise_or($src1,$src2,$mask);
The function cv::bitwise_or calculates the per-element bit-wise logical disjunction for: * Two arrays when src1 and src2 have the same size: \f[\texttt{dst} (I) = \texttt{src1} (I) \vee \texttt{src2} (I) \quad \texttt{if mask} (I) \ne0\f] * An array and a scalar when src2 is constructed from Scalar or has the same number of elements as `src1.channels()`: \f[\texttt{dst} (I) = \texttt{src1} (I) \vee \texttt{src2} \quad \texttt{if mask} (I) \ne0\f] * A scalar and an array when src1 is constructed from Scalar or has the same number of elements as `src2.channels()`: \f[\texttt{dst} (I) = \texttt{src1} \vee \texttt{src2} (I) \quad \texttt{if mask} (I) \ne0\f] In case of floating-point arrays, their machine-specific bit representations (usually IEEE754-compliant) are used for the operation. In case of multi-channel arrays, each channel is processed independently. In the second and third cases above, the scalar is first converted to the array type.
Parameters:
- src1
-
first input array or a scalar.
- src2
-
second input array or a scalar.
- dst
-
output array that has the same size and type as the input arrays.
- mask
-
optional operation mask, 8-bit single channel array, that specifies elements of the output array to be changed.
bitwise_or ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
bitwise_xor
Signature: ([phys] src1(l1,c1,r1); [phys] src2(l2,c2,r2); [o,phys] dst(l3,c3,r3); [phys] mask(l4,c4,r4))
Calculates the per-element bit-wise "exclusive or" operation on two arrays or an array and a scalar. NO BROADCASTING.
$dst = bitwise_xor($src1,$src2); # with defaults
$dst = bitwise_xor($src1,$src2,$mask);
The function cv::bitwise_xor calculates the per-element bit-wise logical "exclusive-or" operation for: * Two arrays when src1 and src2 have the same size: \f[\texttt{dst} (I) = \texttt{src1} (I) \oplus \texttt{src2} (I) \quad \texttt{if mask} (I) \ne0\f] * An array and a scalar when src2 is constructed from Scalar or has the same number of elements as `src1.channels()`: \f[\texttt{dst} (I) = \texttt{src1} (I) \oplus \texttt{src2} \quad \texttt{if mask} (I) \ne0\f] * A scalar and an array when src1 is constructed from Scalar or has the same number of elements as `src2.channels()`: \f[\texttt{dst} (I) = \texttt{src1} \oplus \texttt{src2} (I) \quad \texttt{if mask} (I) \ne0\f] In case of floating-point arrays, their machine-specific bit representations (usually IEEE754-compliant) are used for the operation. In case of multi-channel arrays, each channel is processed independently. In the 2nd and 3rd cases above, the scalar is first converted to the array type.
Parameters:
- src1
-
first input array or a scalar.
- src2
-
second input array or a scalar.
- dst
-
output array that has the same size and type as the input arrays.
- mask
-
optional operation mask, 8-bit single channel array, that specifies elements of the output array to be changed.
bitwise_xor ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
bitwise_not
Signature: ([phys] src(l1,c1,r1); [o,phys] dst(l2,c2,r2); [phys] mask(l3,c3,r3))
Inverts every bit of an array. NO BROADCASTING.
$dst = bitwise_not($src); # with defaults
$dst = bitwise_not($src,$mask);
The function cv::bitwise_not calculates per-element bit-wise inversion of the input array: \f[\texttt{dst} (I) = \neg \texttt{src} (I)\f] In case of a floating-point input array, its machine-specific bit representation (usually IEEE754-compliant) is used for the operation. In case of multi-channel arrays, each channel is processed independently.
Parameters:
- src
-
input array.
- dst
-
output array that has the same size and type as the input array.
- mask
-
optional operation mask, 8-bit single channel array, that specifies elements of the output array to be changed.
bitwise_not ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
absdiff
Signature: ([phys] src1(l1,c1,r1); [phys] src2(l2,c2,r2); [o,phys] dst(l3,c3,r3))
Calculates the per-element absolute difference between two arrays or between an array and a scalar. NO BROADCASTING.
$dst = absdiff($src1,$src2);
The function cv::absdiff calculates: * Absolute difference between two arrays when they have the same size and type: \f[\texttt{dst}(I) = \texttt{saturate} (| \texttt{src1}(I) - \texttt{src2}(I)|)\f] * Absolute difference between an array and a scalar when the second array is constructed from Scalar or has as many elements as the number of channels in `src1`: \f[\texttt{dst}(I) = \texttt{saturate} (| \texttt{src1}(I) - \texttt{src2} |)\f] * Absolute difference between a scalar and an array when the first array is constructed from Scalar or has as many elements as the number of channels in `src2`: \f[\texttt{dst}(I) = \texttt{saturate} (| \texttt{src1} - \texttt{src2}(I) |)\f] where I is a multi-dimensional index of array elements. In case of multi-channel arrays, each channel is processed independently. @note Saturation is not applied when the arrays have the depth CV_32S. You may even get a negative value in the case of overflow.
Parameters:
- src1
-
first input array or a scalar.
- src2
-
second input array or a scalar.
- dst
-
output array that has the same size and type as input arrays.
See also: cv::abs(const Mat&)
absdiff ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
copyTo
Signature: ([phys] src(l1,c1,r1); [o,phys] dst(l2,c2,r2); [phys] mask(l3,c3,r3))
This is an overloaded member function, provided for convenience (python) Copies the matrix to another one. When the operation mask is specified, if the Mat::create call shown above reallocates the matrix, the newly allocated matrix is initialized with all zeros before copying the data. NO BROADCASTING.
$dst = copyTo($src,$mask);
*this. Its non-zero elements indicate which matrix elements need to be copied. The mask has to be of type CV_8U and can have 1 or multiple channels.
Parameters:
- src
-
source matrix.
- dst
-
Destination matrix. If it does not have a proper size or type before the operation, it is reallocated.
- mask
-
Operation mask of the same size as
copyTo ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
inRange
Signature: ([phys] src(l1,c1,r1); [phys] lowerb(l2,c2,r2); [phys] upperb(l3,c3,r3); [o,phys] dst(l4,c4,r4))
Checks if array elements lie between the elements of two other arrays. NO BROADCASTING.
$dst = inRange($src,$lowerb,$upperb);
The function checks the range as follows: =over =item * and so forth. =back That is, dst (I) is set to 255 (all 1 -bits) if src (I) is within the specified 1D, 2D, 3D, ... box and 0 otherwise. When the lower and/or upper boundary parameters are scalars, the indexes (I) at lowerb and upperb in the above formulas should be omitted.
Parameters:
- src
-
first input array.
- lowerb
-
inclusive lower boundary array or a scalar.
- upperb
-
inclusive upper boundary array or a scalar.
- dst
-
output array of the same size as src and CV_8U type.
inRange ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
compare
Signature: ([phys] src1(l1,c1,r1); [phys] src2(l2,c2,r2); [o,phys] dst(l3,c3,r3); int [phys] cmpop())
Performs the per-element comparison of two arrays or an array and scalar value. NO BROADCASTING.
$dst = compare($src1,$src2,$cmpop);
The function compares: * Elements of two arrays when src1 and src2 have the same size: \f[\texttt{dst} (I) = \texttt{src1} (I) \,\texttt{cmpop}\, \texttt{src2} (I)\f] * Elements of src1 with a scalar src2 when src2 is constructed from Scalar or has a single element: \f[\texttt{dst} (I) = \texttt{src1}(I) \,\texttt{cmpop}\, \texttt{src2}\f] * src1 with elements of src2 when src1 is constructed from Scalar or has a single element: \f[\texttt{dst} (I) = \texttt{src1} \,\texttt{cmpop}\, \texttt{src2} (I)\f] When the comparison result is true, the corresponding element of output array is set to 255. The comparison operations can be replaced with the equivalent matrix expressions:
{.cpp}
Mat dst1 = src1 >= src2;
Mat dst2 = src1 < 8;
...
Parameters:
- src1
-
first input array or a scalar; when it is an array, it must have a single channel.
- src2
-
second input array or a scalar; when it is an array, it must have a single channel.
- dst
-
output array of type ref CV_8U that has the same size and the same number of channels as the input arrays.
- cmpop
-
a flag, that specifies correspondence between the arrays (cv::CmpTypes)
See also: checkRange, min, max, threshold
compare ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
min
Signature: ([phys] src1(l1,c1,r1); [phys] src2(l2,c2,r2); [o,phys] dst(l3,c3,r3))
Calculates per-element minimum of two arrays or an array and a scalar. NO BROADCASTING.
$dst = min($src1,$src2);
The function cv::min calculates the per-element minimum of two arrays: \f[\texttt{dst} (I)= \min ( \texttt{src1} (I), \texttt{src2} (I))\f] or array and a scalar: \f[\texttt{dst} (I)= \min ( \texttt{src1} (I), \texttt{value} )\f]
Parameters:
- src1
-
first input array.
- src2
-
second input array of the same size and type as src1.
- dst
-
output array of the same size and type as src1.
See also: max, compare, inRange, minMaxLoc
min ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
max
Signature: ([phys] src1(l1,c1,r1); [phys] src2(l2,c2,r2); [o,phys] dst(l3,c3,r3))
Calculates per-element maximum of two arrays or an array and a scalar. NO BROADCASTING.
$dst = max($src1,$src2);
The function cv::max calculates the per-element maximum of two arrays: \f[\texttt{dst} (I)= \max ( \texttt{src1} (I), \texttt{src2} (I))\f] or array and a scalar: \f[\texttt{dst} (I)= \max ( \texttt{src1} (I), \texttt{value} )\f] @ref MatrixExpressions
Parameters:
- src1
-
first input array.
- src2
-
second input array of the same size and type as src1 .
- dst
-
output array of the same size and type as src1.
See also: min, compare, inRange, minMaxLoc,
max ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
sqrt
Signature: ([phys] src(l1,c1,r1); [o,phys] dst(l2,c2,r2))
Calculates a square root of array elements. NO BROADCASTING.
$dst = sqrt($src);
The function cv::sqrt calculates a square root of each input array element. In case of multi-channel arrays, each channel is processed independently. The accuracy is approximately the same as of the built-in std::sqrt .
Parameters:
- src
-
input floating-point array.
- dst
-
output array of the same size and type as src.
sqrt ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
pow
Signature: ([phys] src(l1,c1,r1); double [phys] power(); [o,phys] dst(l3,c3,r3))
Raises every array element to a power. NO BROADCASTING.
$dst = pow($src,$power);
The function cv::pow raises every element of the input array to power : \f[\texttt{dst} (I) = \fork{\texttt{src}(I)^{power}}{if \(\texttt{power}\) is integer}{|\texttt{src}(I)|^{power}}{otherwise}\f] So, for a non-integer power exponent, the absolute values of input array elements are used. However, it is possible to get true values for negative values using some extra operations. In the example below, computing the 5th root of array src shows:
{.cpp}
Mat mask = src < 0;
pow(src, 1./5, dst);
subtract(Scalar::all(0), dst, dst, mask);
For some values of power, such as integer values, 0.5 and -0.5, specialized faster algorithms are used. Special values (NaN, Inf) are not handled.
Parameters:
- src
-
input array.
- power
-
exponent of power.
- dst
-
output array of the same size and type as src.
See also: sqrt, exp, log, cartToPolar, polarToCart
pow ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
exp
Signature: ([phys] src(l1,c1,r1); [o,phys] dst(l2,c2,r2))
Calculates the exponent of every array element. NO BROADCASTING.
$dst = exp($src);
The function cv::exp calculates the exponent of every element of the input array: \f[\texttt{dst} [I] = e^{ src(I) }\f] The maximum relative error is about 7e-6 for single-precision input and less than 1e-10 for double-precision input. Currently, the function converts denormalized values to zeros on output. Special values (NaN, Inf) are not handled.
Parameters:
- src
-
input array.
- dst
-
output array of the same size and type as src.
See also: log , cartToPolar , polarToCart , phase , pow , sqrt , magnitude
exp ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
log
Signature: ([phys] src(l1,c1,r1); [o,phys] dst(l2,c2,r2))
Calculates the natural logarithm of every array element. NO BROADCASTING.
$dst = log($src);
The function cv::log calculates the natural logarithm of every element of the input array: \f[\texttt{dst} (I) = \log (\texttt{src}(I)) \f] Output on zero, negative and special (NaN, Inf) values is undefined.
Parameters:
- src
-
input array.
- dst
-
output array of the same size and type as src .
See also: exp, cartToPolar, polarToCart, phase, pow, sqrt, magnitude
log ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
polarToCart
Signature: ([phys] magnitude(l1,c1,r1); [phys] angle(l2,c2,r2); [o,phys] x(l3,c3,r3); [o,phys] y(l4,c4,r4); byte [phys] angleInDegrees())
Calculates x and y coordinates of 2D vectors from their magnitude and angle. NO BROADCASTING.
($x,$y) = polarToCart($magnitude,$angle); # with defaults
($x,$y) = polarToCart($magnitude,$angle,$angleInDegrees);
The function cv::polarToCart calculates the Cartesian coordinates of each 2D vector represented by the corresponding elements of magnitude and angle: \f[\begin{array}{l} \texttt{x} (I) = \texttt{magnitude} (I) \cos ( \texttt{angle} (I)) \\ \texttt{y} (I) = \texttt{magnitude} (I) \sin ( \texttt{angle} (I)) \\ \end{array}\f] The relative accuracy of the estimated coordinates is about 1e-6.
Parameters:
- magnitude
-
input floating-point array of magnitudes of 2D vectors; it can be an empty matrix (=Mat()), in this case, the function assumes that all the magnitudes are =1; if it is not empty, it must have the same size and type as angle.
- angle
-
input floating-point array of angles of 2D vectors.
- x
-
output array of x-coordinates of 2D vectors; it has the same size and type as angle.
- y
-
output array of y-coordinates of 2D vectors; it has the same size and type as angle.
- angleInDegrees
-
when true, the input angles are measured in degrees, otherwise, they are measured in radians.
See also: cartToPolar, magnitude, phase, exp, log, pow, sqrt
polarToCart ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
cartToPolar
Signature: ([phys] x(l1,c1,r1); [phys] y(l2,c2,r2); [o,phys] magnitude(l3,c3,r3); [o,phys] angle(l4,c4,r4); byte [phys] angleInDegrees())
Calculates the magnitude and angle of 2D vectors. NO BROADCASTING.
($magnitude,$angle) = cartToPolar($x,$y); # with defaults
($magnitude,$angle) = cartToPolar($x,$y,$angleInDegrees);
The function cv::cartToPolar calculates either the magnitude, angle, or both for every 2D vector (x(I),y(I)): \f[\begin{array}{l} \texttt{magnitude} (I)= \sqrt{\texttt{x}(I)^2+\texttt{y}(I)^2} , \\ \texttt{angle} (I)= \texttt{atan2} ( \texttt{y} (I), \texttt{x} (I))[ \cdot180 / \pi ] \end{array}\f] The angles are calculated with accuracy about 0.3 degrees. For the point (0,0), the angle is set to 0. *Pi) or in degrees (0 to 360 degrees).
Parameters:
- x
-
array of x-coordinates; this must be a single-precision or double-precision floating-point array.
- y
-
array of y-coordinates, that must have the same size and same type as x.
- magnitude
-
output array of magnitudes of the same size and type as x.
- angle
-
output array of angles that has the same size and type as x; the angles are measured in radians (from 0 to 2
- angleInDegrees
-
a flag, indicating whether the angles are measured in radians (which is by default), or in degrees.
See also: Sobel, Scharr
cartToPolar ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
phase
Signature: ([phys] x(l1,c1,r1); [phys] y(l2,c2,r2); [o,phys] angle(l3,c3,r3); byte [phys] angleInDegrees())
Calculates the rotation angle of 2D vectors. NO BROADCASTING.
$angle = phase($x,$y); # with defaults
$angle = phase($x,$y,$angleInDegrees);
The function cv::phase calculates the rotation angle of each 2D vector that is formed from the corresponding elements of x and y : \f[\texttt{angle} (I) = \texttt{atan2} ( \texttt{y} (I), \texttt{x} (I))\f] The angle estimation accuracy is about 0.3 degrees. When x(I)=y(I)=0 , the corresponding angle(I) is set to 0.
Parameters:
- x
-
input floating-point array of x-coordinates of 2D vectors.
- y
-
input array of y-coordinates of 2D vectors; it must have the same size and the same type as x.
- angle
-
output array of vector angles; it has the same size and same type as x .
- angleInDegrees
-
when true, the function calculates the angle in degrees, otherwise, they are measured in radians.
phase ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
magnitude
Signature: ([phys] x(l1,c1,r1); [phys] y(l2,c2,r2); [o,phys] magnitude(l3,c3,r3))
Calculates the magnitude of 2D vectors. NO BROADCASTING.
$magnitude = magnitude($x,$y);
The function cv::magnitude calculates the magnitude of 2D vectors formed from the corresponding elements of x and y arrays: \f[\texttt{dst} (I) = \sqrt{\texttt{x}(I)^2 + \texttt{y}(I)^2}\f]
Parameters:
- x
-
floating-point array of x-coordinates of the vectors.
- y
-
floating-point array of y-coordinates of the vectors; it must have the same size as x.
- magnitude
-
output array of the same size and type as x.
See also: cartToPolar, polarToCart, phase, sqrt
magnitude ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
checkRange
Signature: ([phys] a(l1,c1,r1); byte [phys] quiet(); indx [o,phys] pos(n3=2); double [phys] minVal(); double [phys] maxVal(); byte [o,phys] res())
Checks every element of an input array for invalid values.
($pos,$res) = checkRange($a); # with defaults
($pos,$res) = checkRange($a,$quiet,$minVal,$maxVal);
The function cv::checkRange checks that every array element is neither NaN nor infinite. When minVal \> -DBL_MAX and maxVal \< DBL_MAX, the function also checks that each value is between minVal and maxVal. In case of multi-channel arrays, each channel is processed independently. If some values are out of range, position of the first outlier is stored in pos (when pos != NULL). Then, the function either returns false (when quiet=true) or throws an exception.
Parameters:
- a
-
input array.
- quiet
-
a flag, indicating whether the functions quietly return false when the array elements are out of range or they throw an exception.
- pos
-
optional output parameter, when not NULL, must be a pointer to array of src.dims elements.
- minVal
-
inclusive lower boundary of valid values range.
- maxVal
-
exclusive upper boundary of valid values range.
checkRange ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
patchNaNs
Signature: ([io,phys] a(l1,c1,r1); double [phys] val())
converts NaNs to the given number
patchNaNs($a); # with defaults
patchNaNs($a,$val);
Parameters:
- a
-
input/output matrix (CV_32F type).
- val
-
value to convert the NaNs
patchNaNs ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
gemm
Signature: ([phys] src1(l1,c1,r1); [phys] src2(l2,c2,r2); double [phys] alpha(); [phys] src3(l4,c4,r4); double [phys] beta(); [o,phys] dst(l6,c6,r6); int [phys] flags())
Performs generalized matrix multiplication. NO BROADCASTING.
$dst = gemm($src1,$src2,$alpha,$src3,$beta); # with defaults
$dst = gemm($src1,$src2,$alpha,$src3,$beta,$flags);
The function cv::gemm 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] In case of complex (two-channel) data, performed a complex matrix multiplication. The function can be replaced with a matrix expression. For example, the above call can be replaced with:
{.cpp}
dst = alpha*src1.t()*src2 + beta*src3.t();
Parameters:
- src1
-
first multiplied input matrix that could be real(CV_32FC1, CV_64FC1) or complex(CV_32FC2, CV_64FC2).
- src2
-
second multiplied input matrix of the same type as src1.
- alpha
-
weight of the matrix product.
- src3
-
third optional delta matrix added to the matrix product; it should have the same type as src1 and src2.
- beta
-
weight of src3.
- dst
-
output matrix; it has the proper size and the same type as input matrices.
- flags
-
operation flags (cv::GemmFlags)
See also: mulTransposed , transform
gemm ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
mulTransposed
Signature: ([phys] src(l1,c1,r1); [o,phys] dst(l2,c2,r2); byte [phys] aTa(); [phys] delta(l4,c4,r4); double [phys] scale(); int [phys] dtype())
Calculates the product of a matrix and its transposition. NO BROADCASTING.
$dst = mulTransposed($src,$aTa); # with defaults
$dst = mulTransposed($src,$aTa,$delta,$scale,$dtype);
The function cv::mulTransposed calculates the product of src and its transposition: \f[\texttt{dst} = \texttt{scale} ( \texttt{src} - \texttt{delta} )^T ( \texttt{src} - \texttt{delta} )\f] if aTa=true , and \f[\texttt{dst} = \texttt{scale} ( \texttt{src} - \texttt{delta} ) ( \texttt{src} - \texttt{delta} )^T\f] otherwise. The function is used to calculate the covariance matrix. With zero delta, it can be used as a faster substitute for general matrix product A*B when B=A'
Parameters:
- src
-
input single-channel matrix. Note that unlike gemm, the function can multiply not only floating-point matrices.
- dst
-
output square matrix.
- aTa
-
Flag specifying the multiplication ordering. See the description below.
- delta
-
Optional delta matrix subtracted from src before the multiplication. When the matrix is empty ( delta=noArray() ), it is assumed to be zero, that is, nothing is subtracted. If it has the same size as src , it is simply subtracted. Otherwise, it is "repeated" (see repeat ) to cover the full src and then subtracted. Type of the delta matrix, when it is not empty, must be the same as the type of created output matrix. See the dtype parameter description below.
- scale
-
Optional scale factor for the matrix product.
- dtype
-
Optional type of the output matrix. When it is negative, the output matrix will have the same type as src . Otherwise, it will be type=CV_MAT_DEPTH(dtype) that should be either CV_32F or CV_64F .
See also: calcCovarMatrix, gemm, repeat, reduce
mulTransposed ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
transpose
Signature: ([phys] src(l1,c1,r1); [o,phys] dst(l2,c2,r2))
Transposes a matrix. NO BROADCASTING.
$dst = transpose($src);
The function cv::transpose transposes the matrix src : \f[\texttt{dst} (i,j) = \texttt{src} (j,i)\f] @note No complex conjugation is done in case of a complex matrix. It should be done separately if needed.
Parameters:
- src
-
input array.
- dst
-
output array of the same type as src.
transpose ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
transform
Signature: ([phys] src(l1,c1,r1); [o,phys] dst(l2,c2,r2); [phys] m(l3,c3,r3))
Performs the matrix transformation of every array element. NO BROADCASTING.
$dst = transform($src,$m);
The function cv::transform performs the matrix transformation of every element of the array src and stores the results in dst : \f[\texttt{dst} (I) = \texttt{m} \cdot \texttt{src} (I)\f] (when m.cols=src.channels() ), or \f[\texttt{dst} (I) = \texttt{m} \cdot [ \texttt{src} (I); 1]\f] (when m.cols=src.channels()+1 ) Every element of the N -channel array src is interpreted as N -element vector that is transformed using the M x N or M x (N+1) matrix m to M-element vector - the corresponding element of the output array dst . The function may be used for geometrical transformation of N -dimensional points, arbitrary linear color space transformation (such as various kinds of RGB to YUV transforms), shuffling the image channels, and so forth.
Parameters:
- src
-
input array that must have as many channels (1 to 4) as m.cols or m.cols-1.
- dst
-
output array of the same size and depth as src; it has as many channels as m.rows.
- m
-
transformation 2x2 or 2x3 floating-point matrix.
See also: perspectiveTransform, getAffineTransform, estimateAffine2D, warpAffine, warpPerspective
transform ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
perspectiveTransform
Signature: ([phys] src(l1,c1,r1); [o,phys] dst(l2,c2,r2); [phys] m(l3,c3,r3))
Performs the perspective matrix transformation of vectors. NO BROADCASTING.
$dst = perspectiveTransform($src,$m);
The function cv::perspectiveTransform transforms every element of src by treating it as a 2D or 3D vector, in the following way: \f[(x, y, z) \rightarrow (x'/w, y'/w, z'/w)\f] where \f[(x', y', z', w') = \texttt{mat} \cdot \begin{bmatrix} x & y & z & 1 \end{bmatrix}\f] and \f[w = \fork{w'}{if \(w' \ne 0\)}{\infty}{otherwise}\f] Here a 3D vector transformation is shown. In case of a 2D vector transformation, the z component is omitted. @note The function transforms a sparse set of 2D or 3D vectors. If you want to transform an image using perspective transformation, use warpPerspective . If you have an inverse problem, that is, you want to compute the most probable perspective transformation out of several pairs of corresponding points, you can use getPerspectiveTransform or findHomography .
Parameters:
- src
-
input two-channel or three-channel floating-point array; each element is a 2D/3D vector to be transformed.
- dst
-
output array of the same size and type as src.
- m
-
3x3 or 4x4 floating-point transformation matrix.
See also: transform, warpPerspective, getPerspectiveTransform, findHomography
perspectiveTransform ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
completeSymm
Signature: ([io,phys] m(l1,c1,r1); byte [phys] lowerToUpper())
Copies the lower or the upper half of a square matrix to its another half.
completeSymm($m); # with defaults
completeSymm($m,$lowerToUpper);
The function cv::completeSymm copies the lower or the upper half of a square matrix to its another half. The matrix diagonal remains unchanged: - \texttt{m}_{ij}=\texttt{m}_{ji}
for i > j
if lowerToUpper=false - \texttt{m}_{ij}=\texttt{m}_{ji}
for i < j
if lowerToUpper=true
Parameters:
- m
-
input-output floating-point square matrix.
- lowerToUpper
-
operation flag; if true, the lower half is copied to the upper half. Otherwise, the upper half is copied to the lower half.
See also: flip, transpose
completeSymm ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
setIdentity
Signature: ([io,phys] mtx(l1,c1,r1); double [phys] s(n2=4))
Initializes a scaled identity matrix.
setIdentity($mtx); # with defaults
setIdentity($mtx,$s);
The function cv::setIdentity initializes a scaled identity matrix: \f[\texttt{mtx} (i,j)= \fork{\texttt{value}}{ if \(i=j\)}{0}{otherwise}\f] The function can also be emulated using the matrix initializers and the matrix expressions:
Mat A = Mat::eye(4, 3, CV_32F)*5;
// A will be set to [[5, 0, 0], [0, 5, 0], [0, 0, 5], [0, 0, 0]]
Parameters:
- mtx
-
matrix to initialize (not necessarily square).
- s
-
value to assign to diagonal elements.
See also: Mat::zeros, Mat::ones, Mat::setTo, Mat::operator=
setIdentity ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
determinant
Signature: ([phys] mtx(l1,c1,r1); double [o,phys] res())
Returns the determinant of a square floating-point matrix.
$res = determinant($mtx);
The function cv::determinant calculates and returns the determinant of the specified matrix. For small matrices ( mtx.cols=mtx.rows\<=3 ), the direct method is used. For larger matrices, the function uses LU factorization with partial pivoting. For symmetric positively-determined matrices, it is also possible to use eigen decomposition to calculate the determinant. @ref MatrixExpressions
Parameters:
- mtx
-
input matrix that must have CV_32FC1 or CV_64FC1 type and square size.
See also: trace, invert, solve, eigen,
determinant ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
trace
Signature: ([phys] mtx(l1,c1,r1); double [o,phys] res(n2=4))
Returns the trace of a matrix.
$res = trace($mtx);
The function cv::trace returns the sum of the diagonal elements of the matrix mtx . \f[\mathrm{tr} ( \texttt{mtx} ) = \sum _i \texttt{mtx} (i,i)\f]
Parameters:
- mtx
-
input matrix.
trace ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
invert
Signature: ([phys] src(l1,c1,r1); [o,phys] dst(l2,c2,r2); int [phys] flags(); double [o,phys] res())
Finds the inverse or pseudo-inverse of a matrix. NO BROADCASTING.
($dst,$res) = invert($src); # with defaults
($dst,$res) = invert($src,$flags);
The function cv::invert inverts the matrix src and stores the result in dst . When the matrix src is singular or non-square, the function calculates the pseudo-inverse matrix (the dst matrix) so that norm(src*dst - I) is minimal, where I is an identity matrix. In case of the #DECOMP_LU method, the function returns non-zero value if the inverse has been successfully calculated and 0 if src is singular. In case of the #DECOMP_SVD method, the function returns the inverse condition number of src (the ratio of the smallest singular value to the largest singular value) and 0 if src is singular. The SVD method calculates a pseudo-inverse matrix if src is singular. Similarly to #DECOMP_LU, the method #DECOMP_CHOLESKY works only with non-singular square matrices that should also be symmetrical and positively defined. In this case, the function stores the inverted matrix in dst and returns non-zero. Otherwise, it returns 0.
Parameters:
- src
-
input floating-point M x N matrix.
- dst
-
output matrix of N x M size and the same type as src.
- flags
-
inversion method (cv::DecompTypes)
See also: solve, SVD
invert ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
solve
Signature: ([phys] src1(l1,c1,r1); [phys] src2(l2,c2,r2); [o,phys] dst(l3,c3,r3); int [phys] flags(); byte [o,phys] res())
Solves one or more linear systems or least-squares problems. NO BROADCASTING.
($dst,$res) = solve($src1,$src2); # with defaults
($dst,$res) = solve($src1,$src2,$flags);
The function cv::solve solves a linear system or least-squares problem (the latter is possible with SVD or QR methods, or by specifying the flag #DECOMP_NORMAL ): \f[\texttt{dst} = \arg \min _X \| \texttt{src1} \cdot \texttt{X} - \texttt{src2} \|\f] If #DECOMP_LU or #DECOMP_CHOLESKY method is used, the function returns 1 if src1 (or \texttt{src1}^T\texttt{src1}
) is non-singular. Otherwise, it returns 0. In the latter case, dst is not valid. Other methods find a pseudo-solution in case of a singular left-hand side part. @note If you want to find a unity-norm solution of an under-defined singular system \texttt{src1}\cdot\texttt{dst}=0
, the function solve will not do the work. Use SVD::solveZ instead.
Parameters:
- src1
-
input matrix on the left-hand side of the system.
- src2
-
input matrix on the right-hand side of the system.
- dst
-
output solution.
- flags
-
solution (matrix inversion) method (#DecompTypes)
See also: invert, SVD, eigen
solve ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
sort
Signature: ([phys] src(l1,c1,r1); [o,phys] dst(l2,c2,r2); int [phys] flags())
Sorts each row or each column of a matrix. NO BROADCASTING.
$dst = sort($src,$flags);
The function cv::sort sorts each matrix row or each matrix column in ascending or descending order. So you should pass two operation flags to get desired behaviour. If you want to sort matrix rows or columns lexicographically, you can use STL std::sort generic function with the proper comparison predicate.
Parameters:
- src
-
input single-channel array.
- dst
-
output array of the same size and type as src.
- flags
-
operation flags, a combination of #SortFlags
See also: sortIdx, randShuffle
sort ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
sortIdx
Signature: ([phys] src(l1,c1,r1); [o,phys] dst(l2,c2,r2); int [phys] flags())
Sorts each row or each column of a matrix. NO BROADCASTING.
$dst = sortIdx($src,$flags);
The function cv::sortIdx sorts each matrix row or each matrix column in the ascending or descending order. So you should pass two operation flags to get desired behaviour. Instead of reordering the elements themselves, it stores the indices of sorted elements in the output array. For example:
Mat A = Mat::eye(3,3,CV_32F), B;
sortIdx(A, B, SORT_EVERY_ROW + SORT_ASCENDING);
// B will probably contain
// (because of equal elements in A some permutations are possible):
// [[1, 2, 0], [0, 2, 1], [0, 1, 2]]
Parameters:
- src
-
input single-channel array.
- dst
-
output integer array of the same size as src.
- flags
-
operation flags that could be a combination of cv::SortFlags
See also: sort, randShuffle
sortIdx ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
solveCubic
Signature: ([phys] coeffs(l1,c1,r1); [o,phys] roots(l2,c2,r2); int [o,phys] res())
Finds the real roots of a cubic equation. NO BROADCASTING.
($roots,$res) = solveCubic($coeffs);
The function solveCubic finds the real roots of a cubic equation: =over =back The roots are stored in the roots array.
Parameters:
- coeffs
-
equation coefficients, an array of 3 or 4 elements.
- roots
-
output array of real roots that has 1 or 3 elements.
Returns: number of real roots. It can be 0, 1 or 2.
solveCubic ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
solvePoly
Signature: ([phys] coeffs(l1,c1,r1); [o,phys] roots(l2,c2,r2); int [phys] maxIters(); double [o,phys] res())
Finds the real or complex roots of a polynomial equation. NO BROADCASTING.
($roots,$res) = solvePoly($coeffs); # with defaults
($roots,$res) = solvePoly($coeffs,$maxIters);
The function cv::solvePoly finds real and complex roots of a polynomial equation: \f[\texttt{coeffs} [n] x^{n} + \texttt{coeffs} [n-1] x^{n-1} + ... + \texttt{coeffs} [1] x + \texttt{coeffs} [0] = 0\f]
Parameters:
- coeffs
-
array of polynomial coefficients.
- roots
-
output (complex) array of roots.
- maxIters
-
maximum number of iterations the algorithm does.
solvePoly ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
eigen
Signature: ([phys] src(l1,c1,r1); [o,phys] eigenvalues(l2,c2,r2); [o,phys] eigenvectors(l3,c3,r3); byte [o,phys] res())
Calculates eigenvalues and eigenvectors of a symmetric matrix. NO BROADCASTING.
($eigenvalues,$eigenvectors,$res) = eigen($src);
The function cv::eigen calculates just eigenvalues, or eigenvalues and eigenvectors of the symmetric matrix src:
src*eigenvectors.row(i).t() = eigenvalues.at<srcType>(i)*eigenvectors.row(i).t()
@note Use cv::eigenNonSymmetric for calculation of real eigenvalues and eigenvectors of non-symmetric matrix.
Parameters:
- src
-
input matrix that must have CV_32FC1 or CV_64FC1 type, square size and be symmetrical (src ^T^ == src).
- eigenvalues
-
output vector of eigenvalues of the same type as src; the eigenvalues are stored in the descending order.
- eigenvectors
-
output matrix of eigenvectors; it has the same size and type as src; the eigenvectors are stored as subsequent matrix rows, in the same order as the corresponding eigenvalues.
See also: eigenNonSymmetric, completeSymm , PCA
eigen ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
eigenNonSymmetric
Signature: ([phys] src(l1,c1,r1); [o,phys] eigenvalues(l2,c2,r2); [o,phys] eigenvectors(l3,c3,r3))
Calculates eigenvalues and eigenvectors of a non-symmetric matrix (real eigenvalues only). NO BROADCASTING.
($eigenvalues,$eigenvectors) = eigenNonSymmetric($src);
@note Assumes real eigenvalues. The function calculates eigenvalues and eigenvectors (optional) of the square matrix src:
src*eigenvectors.row(i).t() = eigenvalues.at<srcType>(i)*eigenvectors.row(i).t()
Parameters:
- src
-
input matrix (CV_32FC1 or CV_64FC1 type).
- eigenvalues
-
output vector of eigenvalues (type is the same type as src).
- eigenvectors
-
output matrix of eigenvectors (type is the same type as src). The eigenvectors are stored as subsequent matrix rows, in the same order as the corresponding eigenvalues.
See also: eigen
eigenNonSymmetric ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
calcCovarMatrix
Signature: ([phys] samples(l1,c1,r1); [o,phys] covar(l2,c2,r2); [io,phys] mean(l3,c3,r3); int [phys] flags(); int [phys] ctype())
NO BROADCASTING.
$covar = calcCovarMatrix($samples,$mean,$flags); # with defaults
$covar = calcCovarMatrix($samples,$mean,$flags,$ctype);
@overload @note use #COVAR_ROWS or #COVAR_COLS flag
Parameters:
- samples
-
samples stored as rows/columns of a single matrix.
- covar
-
output covariance matrix of the type ctype and square size.
- mean
-
input or output (depending on the flags) array as the average value of the input vectors.
- flags
-
operation flags as a combination of #CovarFlags
- ctype
-
type of the matrixl; it equals 'CV_64F' by default.
calcCovarMatrix ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
PCACompute
Signature: ([phys] data(l1,c1,r1); [io,phys] mean(l2,c2,r2); [o,phys] eigenvectors(l3,c3,r3); int [phys] maxComponents())
NO BROADCASTING.
$eigenvectors = PCACompute($data,$mean); # with defaults
$eigenvectors = PCACompute($data,$mean,$maxComponents);
wrap PCA::operator()
PCACompute ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
PCACompute2
Signature: ([phys] data(l1,c1,r1); [io,phys] mean(l2,c2,r2); [o,phys] eigenvectors(l3,c3,r3); [o,phys] eigenvalues(l4,c4,r4); int [phys] maxComponents())
NO BROADCASTING.
($eigenvectors,$eigenvalues) = PCACompute2($data,$mean); # with defaults
($eigenvectors,$eigenvalues) = PCACompute2($data,$mean,$maxComponents);
wrap PCA::operator() and add eigenvalues output parameter
PCACompute2 ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
PCACompute3
Signature: ([phys] data(l1,c1,r1); [io,phys] mean(l2,c2,r2); [o,phys] eigenvectors(l3,c3,r3); double [phys] retainedVariance())
NO BROADCASTING.
$eigenvectors = PCACompute3($data,$mean,$retainedVariance);
wrap PCA::operator()
PCACompute3 ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
PCACompute4
Signature: ([phys] data(l1,c1,r1); [io,phys] mean(l2,c2,r2); [o,phys] eigenvectors(l3,c3,r3); [o,phys] eigenvalues(l4,c4,r4); double [phys] retainedVariance())
NO BROADCASTING.
($eigenvectors,$eigenvalues) = PCACompute4($data,$mean,$retainedVariance);
wrap PCA::operator() and add eigenvalues output parameter
PCACompute4 ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
PCAProject
Signature: ([phys] data(l1,c1,r1); [phys] mean(l2,c2,r2); [phys] eigenvectors(l3,c3,r3); [o,phys] result(l4,c4,r4))
NO BROADCASTING.
$result = PCAProject($data,$mean,$eigenvectors);
wrap PCA::project
PCAProject ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
PCABackProject
Signature: ([phys] data(l1,c1,r1); [phys] mean(l2,c2,r2); [phys] eigenvectors(l3,c3,r3); [o,phys] result(l4,c4,r4))
NO BROADCASTING.
$result = PCABackProject($data,$mean,$eigenvectors);
wrap PCA::backProject
PCABackProject ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
SVDecomp
Signature: ([phys] src(l1,c1,r1); [o,phys] w(l2,c2,r2); [o,phys] u(l3,c3,r3); [o,phys] vt(l4,c4,r4); int [phys] flags())
NO BROADCASTING.
($w,$u,$vt) = SVDecomp($src); # with defaults
($w,$u,$vt) = SVDecomp($src,$flags);
wrap SVD::compute
SVDecomp ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
SVBackSubst
Signature: ([phys] w(l1,c1,r1); [phys] u(l2,c2,r2); [phys] vt(l3,c3,r3); [phys] rhs(l4,c4,r4); [o,phys] dst(l5,c5,r5))
NO BROADCASTING.
$dst = SVBackSubst($w,$u,$vt,$rhs);
wrap SVD::backSubst
SVBackSubst ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
Mahalanobis
Signature: ([phys] v1(l1,c1,r1); [phys] v2(l2,c2,r2); [phys] icovar(l3,c3,r3); double [o,phys] res())
Calculates the Mahalanobis distance between two vectors.
$res = Mahalanobis($v1,$v2,$icovar);
The function cv::Mahalanobis calculates and returns the weighted distance between two vectors: \f[d( \texttt{vec1} , \texttt{vec2} )= \sqrt{\sum_{i,j}{\texttt{icovar(i,j)}\cdot(\texttt{vec1}(I)-\texttt{vec2}(I))\cdot(\texttt{vec1(j)}-\texttt{vec2(j)})} }\f] The covariance matrix may be calculated using the #calcCovarMatrix function and then inverted using the invert function (preferably using the #DECOMP_SVD method, as the most accurate).
Parameters:
- v1
-
first 1D input vector.
- v2
-
second 1D input vector.
- icovar
-
inverse covariance matrix.
Mahalanobis ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
dft
Signature: ([phys] src(l1,c1,r1); [o,phys] dst(l2,c2,r2); int [phys] flags(); int [phys] nonzeroRows())
Performs a forward or inverse Discrete Fourier transform of a 1D or 2D floating-point array. NO BROADCASTING.
$dst = dft($src); # with defaults
$dst = dft($src,$flags,$nonzeroRows);
The function cv::dft performs one of the following: =over =back F^{(N)}_{jk}=\exp(-2\pi i j k/N)
and i=\sqrt{-1}
- Inverse the Fourier transform of a 1D vector of N elements: \f[\begin{array}{l} X'= \left (F^{(N)} \right )^{-1} \cdot Y = \left (F^{(N)} \right )^* \cdot y \\ X = (1/N) \cdot X, \end{array}\f] where F^*=\left(\textrm{Re}(F^{(N)})-\textrm{Im}(F^{(N)})\right)^T
- Forward the 2D Fourier transform of a M x N matrix: \f[Y = F^{(M)} \cdot X \cdot F^{(N)}\f] - Inverse the 2D Fourier transform of a M x N matrix: \f[\begin{array}{l} X'= \left (F^{(M)} \right )^* \cdot Y \cdot \left (F^{(N)} \right )^* \\ X = \frac{1}{M \cdot N} \cdot X' \end{array}\f] In case of real (single-channel) data, the output spectrum of the forward Fourier transform or input spectrum of the inverse Fourier transform can be represented in a packed format called *CCS* (complex-conjugate-symmetrical). It was borrowed from IPL (Intel* Image Processing Library). Here is how 2D *CCS* spectrum looks: \f[\begin{bmatrix} Re Y_{0,0} & Re Y_{0,1} & Im Y_{0,1} & Re Y_{0,2} & Im Y_{0,2} & \cdots & Re Y_{0,N/2-1} & Im Y_{0,N/2-1} & Re Y_{0,N/2} \\ Re Y_{1,0} & Re Y_{1,1} & Im Y_{1,1} & Re Y_{1,2} & Im Y_{1,2} & \cdots & Re Y_{1,N/2-1} & Im Y_{1,N/2-1} & Re Y_{1,N/2} \\ Im Y_{1,0} & Re Y_{2,1} & Im Y_{2,1} & Re Y_{2,2} & Im Y_{2,2} & \cdots & Re Y_{2,N/2-1} & Im Y_{2,N/2-1} & Im Y_{1,N/2} \\ \hdotsfor{9} \\ Re Y_{M/2-1,0} & Re Y_{M-3,1} & Im Y_{M-3,1} & \hdotsfor{3} & Re Y_{M-3,N/2-1} & Im Y_{M-3,N/2-1}& Re Y_{M/2-1,N/2} \\ Im Y_{M/2-1,0} & Re Y_{M-2,1} & Im Y_{M-2,1} & \hdotsfor{3} & Re Y_{M-2,N/2-1} & Im Y_{M-2,N/2-1}& Im Y_{M/2-1,N/2} \\ Re Y_{M/2,0} & Re Y_{M-1,1} & Im Y_{M-1,1} & \hdotsfor{3} & Re Y_{M-1,N/2-1} & Im Y_{M-1,N/2-1}& Re Y_{M/2,N/2} \end{bmatrix}\f] In case of 1D transform of a real vector, the output looks like the first row of the matrix above. So, the function chooses an operation mode depending on the flags and size of the input array: =over =back If #DFT_SCALE is set, the scaling is done after the transformation. Unlike dct , the function supports arrays of arbitrary size. But only those arrays are processed efficiently, whose sizes can be factorized in a product of small prime numbers (2, 3, and 5 in the current implementation). Such an efficient DFT size can be calculated using the getOptimalDFTSize method. The sample below illustrates how to calculate a DFT-based convolution of two 2D real arrays:
void convolveDFT(InputArray A, InputArray B, OutputArray C)
{
// reallocate the output array if needed
C.create(abs(A.rows - B.rows)+1, abs(A.cols - B.cols)+1, A.type());
Size dftSize;
// calculate the size of DFT transform
dftSize.width = getOptimalDFTSize(A.cols + B.cols - 1);
dftSize.height = getOptimalDFTSize(A.rows + B.rows - 1);
// allocate temporary buffers and initialize them with 0's
Mat tempA(dftSize, A.type(), Scalar::all(0));
Mat tempB(dftSize, B.type(), Scalar::all(0));
// copy A and B to the top-left corners of tempA and tempB, respectively
Mat roiA(tempA, Rect(0,0,A.cols,A.rows));
A.copyTo(roiA);
Mat roiB(tempB, Rect(0,0,B.cols,B.rows));
B.copyTo(roiB);
// now transform the padded A & B in-place;
// use "nonzeroRows" hint for faster processing
dft(tempA, tempA, 0, A.rows);
dft(tempB, tempB, 0, B.rows);
// multiply the spectrums;
// the function handles packed spectrum representations well
mulSpectrums(tempA, tempB, tempA);
// transform the product back from the frequency domain.
// Even though all the result rows will be non-zero,
// you need only the first C.rows of them, and thus you
// pass nonzeroRows == C.rows
dft(tempA, tempA, DFT_INVERSE + DFT_SCALE, C.rows);
// now copy the result back to C.
tempA(Rect(0, 0, C.cols, C.rows)).copyTo(C);
// all the temporary buffers will be deallocated automatically
}
To optimize this sample, consider the following approaches: =over =back All of the above improvements have been implemented in #matchTemplate and #filter2D . Therefore, by using them, you can get the performance even better than with the above theoretically optimal implementation. Though, those two functions actually calculate cross-correlation, not convolution, so you need to "flip" the second convolution operand B vertically and horizontally using flip . @note - An example using the discrete fourier transform can be found at opencv_source_code/samples/cpp/dft.cpp - (Python) An example using the dft functionality to perform Wiener deconvolution can be found at opencv_source/samples/python/deconvolution.py - (Python) An example rearranging the quadrants of a Fourier image can be found at opencv_source/samples/python/dft.py
Parameters:
- src
-
input array that could be real or complex.
- dst
-
output array whose size and type depends on the flags .
- flags
-
transformation flags, representing a combination of the #DftFlags
- nonzeroRows
-
when the parameter is not zero, the function assumes that only the first nonzeroRows rows of the input array (#DFT_INVERSE is not set) or only the first nonzeroRows of the output array (#DFT_INVERSE is set) contain non-zeros, thus, the function can handle the rest of the rows more efficiently and save some time; this technique is very useful for calculating array cross-correlation or convolution using DFT.
See also: dct , getOptimalDFTSize , mulSpectrums, filter2D , matchTemplate , flip , cartToPolar , magnitude , phase
dft ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
idft
Signature: ([phys] src(l1,c1,r1); [o,phys] dst(l2,c2,r2); int [phys] flags(); int [phys] nonzeroRows())
Calculates the inverse Discrete Fourier Transform of a 1D or 2D array. NO BROADCASTING.
$dst = idft($src); # with defaults
$dst = idft($src,$flags,$nonzeroRows);
idft(src, dst, flags) is equivalent to dft(src, dst, flags | #DFT_INVERSE) . @note None of dft and idft scales the result by default. So, you should pass #DFT_SCALE to one of dft or idft explicitly to make these transforms mutually inverse.
Parameters:
- src
-
input floating-point real or complex array.
- dst
-
output array whose size and type depend on the flags.
- flags
-
operation flags (see dft and #DftFlags).
- nonzeroRows
-
number of dst rows to process; the rest of the rows have undefined content (see the convolution sample in dft description.
See also: dft, dct, idct, mulSpectrums, getOptimalDFTSize
idft ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
dct
Signature: ([phys] src(l1,c1,r1); [o,phys] dst(l2,c2,r2); int [phys] flags())
Performs a forward or inverse discrete Cosine transform of 1D or 2D array. NO BROADCASTING.
$dst = dct($src); # with defaults
$dst = dct($src,$flags);
The function cv::dct performs a forward or inverse discrete Cosine transform (DCT) of a 1D or 2D floating-point array: =over =back \alpha_0=1
, \alpha_j=2
for *j \> 0*. - Inverse Cosine transform of a 1D vector of N elements: \f[X = \left (C^{(N)} \right )^{-1} \cdot Y = \left (C^{(N)} \right )^T \cdot Y\f] (since C^{(N)}
is an orthogonal matrix, C^{(N)} \cdot \left(C^{(N)}\right)^T = I
) - Forward 2D Cosine transform of M x N matrix: \f[Y = C^{(N)} \cdot X \cdot \left (C^{(N)} \right )^T\f] - Inverse 2D Cosine transform of M x N matrix: \f[X = \left (C^{(N)} \right )^T \cdot X \cdot C^{(N)}\f] The function chooses the mode of operation by looking at the flags and size of the input array: =over =item * If (flags & #DCT_ROWS) != 0 , the function performs a 1D transform of each row. =item * If the array is a single column or a single row, the function performs a 1D transform. =item * If none of the above is true, the function performs a 2D transform. =back @note Currently dct supports even-size arrays (2, 4, 6 ...). For data analysis and approximation, you can pad the array when necessary. Also, the function performance depends very much, and not monotonically, on the array size (see getOptimalDFTSize ). In the current implementation DCT of a vector of size N is calculated via DFT of a vector of size N/2 . Thus, the optimal DCT size N1 \>= N can be calculated as:
size_t getOptimalDCTSize(size_t N) { return 2*getOptimalDFTSize((N+1)/2); }
N1 = getOptimalDCTSize(N);
Parameters:
- src
-
input floating-point array.
- dst
-
output array of the same size and type as src .
- flags
-
transformation flags as a combination of cv::DftFlags (DCT_*)
See also: dft , getOptimalDFTSize , idct
dct ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
idct
Signature: ([phys] src(l1,c1,r1); [o,phys] dst(l2,c2,r2); int [phys] flags())
Calculates the inverse Discrete Cosine Transform of a 1D or 2D array. NO BROADCASTING.
$dst = idct($src); # with defaults
$dst = idct($src,$flags);
idct(src, dst, flags) is equivalent to dct(src, dst, flags | DCT_INVERSE).
Parameters:
- src
-
input floating-point single-channel array.
- dst
-
output array of the same size and type as src.
- flags
-
operation flags.
See also: dct, dft, idft, getOptimalDFTSize
idct ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
mulSpectrums
Signature: ([phys] a(l1,c1,r1); [phys] b(l2,c2,r2); [o,phys] c(l3,c3,r3); int [phys] flags(); byte [phys] conjB())
Performs the per-element multiplication of two Fourier spectrums. NO BROADCASTING.
$c = mulSpectrums($a,$b,$flags); # with defaults
$c = mulSpectrums($a,$b,$flags,$conjB);
The function cv::mulSpectrums performs the per-element multiplication of the two CCS-packed or complex matrices that are results of a real or complex Fourier transform. The function, together with dft and idft , may be used to calculate convolution (pass conjB=false ) or correlation (pass conjB=true ) of two arrays rapidly. When the arrays are complex, they are simply multiplied (per element) with an optional conjugation of the second-array elements. When the arrays are real, they are assumed to be CCS-packed (see dft for details).
Parameters:
- a
-
first input array.
- b
-
second input array of the same size and type as src1 .
- c
-
output array of the same size and type as src1 .
- flags
-
operation flags; currently, the only supported flag is cv::DFT_ROWS, which indicates that each row of src1 and src2 is an independent 1D Fourier spectrum. If you do not want to use this flag, then simply add a `0` as value.
- conjB
-
optional flag that conjugates the second input array before the multiplication (true) or not (false).
mulSpectrums ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
getOptimalDFTSize
Returns the optimal DFT size for a given vector size.
$res = getOptimalDFTSize($vecsize);
DFT performance is not a monotonic function of a vector size. Therefore, when you calculate convolution of two arrays or perform the spectral analysis of an array, it usually makes sense to pad the input data with zeros to get a bit larger array that can be transformed much faster than the original one. Arrays whose size is a power-of-two (2, 4, 8, 16, 32, ...) are the fastest to process. Though, the arrays whose size is a product of 2's, 3's, and 5's (for example, 300 = 5*5*3*2*2) are also processed quite efficiently. The function cv::getOptimalDFTSize returns the minimum number N that is greater than or equal to vecsize so that the DFT of a vector of size N can be processed efficiently. In the current implementation N = 2 ^p^ * 3 ^q^ * 5 ^r^ for some integer p, q, r. The function returns a negative number if vecsize is too large (very close to INT_MAX ). While the function cannot be used directly to estimate the optimal vector size for DCT transform (since the current DCT implementation supports only even-size vectors), it can be easily processed as getOptimalDFTSize((vecsize+1)/2)*2.
Parameters:
- vecsize
-
vector size.
See also: dft , dct , idft , idct , mulSpectrums
setRNGSeed
Sets state of default random number generator.
setRNGSeed($seed);
The function cv::setRNGSeed sets state of default random number generator to custom value.
Parameters:
- seed
-
new state for default random number generator
See also: RNG, randu, randn
randu
Signature: ([io,phys] dst(l1,c1,r1); [phys] low(l2,c2,r2); [phys] high(l3,c3,r3))
Generates a single uniformly-distributed random number or an array of random numbers.
randu($dst,$low,$high);
Non-template variant of the function fills the matrix dst with uniformly-distributed random numbers from the specified range: \f[\texttt{low} _c \leq \texttt{dst} (I)_c < \texttt{high} _c\f]
Parameters:
- dst
-
output array of random numbers; the array must be pre-allocated.
- low
-
inclusive lower boundary of the generated random numbers.
- high
-
exclusive upper boundary of the generated random numbers.
See also: RNG, randn, theRNG
randu ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
randn
Signature: ([io,phys] dst(l1,c1,r1); [phys] mean(l2,c2,r2); [phys] stddev(l3,c3,r3))
Fills the array with normally distributed random numbers.
randn($dst,$mean,$stddev);
The function cv::randn fills the matrix dst with normally distributed random numbers with the specified mean vector and the standard deviation matrix. The generated random numbers are clipped to fit the value range of the output array data type.
Parameters:
- dst
-
output array of random numbers; the array must be pre-allocated and have 1 to 4 channels.
- mean
-
mean value (expectation) of the generated random numbers.
- stddev
-
standard deviation of the generated random numbers; it can be either a vector (in which case a diagonal standard deviation matrix is assumed) or a square matrix.
See also: RNG, randu
randn ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
randShuffle
Signature: ([io,phys] dst(l1,c1,r1); double [phys] iterFactor(); RNGWrapper * rng)
Shuffles the array elements randomly.
randShuffle($dst); # with defaults
randShuffle($dst,$iterFactor,$rng);
The function cv::randShuffle shuffles the specified 1D array by randomly choosing pairs of elements and swapping them. The number of such swap operations will be dst.rows*dst.cols*iterFactor .
Parameters:
- dst
-
input/output numerical 1D array.
- iterFactor
-
scale factor that determines the number of random swap operations (see the details below).
- rng
-
optional random number generator used for shuffling; if it is zero, theRNG () is used instead.
See also: RNG, sort
randShuffle ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
kmeans
Signature: ([phys] data(l1,c1,r1); int [phys] K(); [io,phys] bestLabels(l3,c3,r3); int [phys] attempts(); int [phys] flags(); [o,phys] centers(l7,c7,r7); double [o,phys] res(); TermCriteriaWrapper * criteria)
Finds centers of clusters and groups input samples around the clusters. NO BROADCASTING.
($centers,$res) = kmeans($data,$K,$bestLabels,$criteria,$attempts,$flags);
The function kmeans implements a k-means algorithm that finds the centers of cluster_count clusters and groups the input samples around the clusters. As an output, \texttt{bestLabels}_i
contains a 0-based cluster index for the sample stored in the i^{th}
row of the samples matrix. @note - (Python) An example on K-means clustering can be found at opencv_source_code/samples/python/kmeans.py \<cv::Point2f\> points(sampleCount); \f[\sum _i \| \texttt{samples} _i - \texttt{centers} _{ \texttt{labels} _i} \| ^2\f] after every attempt. The best (minimum) value is chosen and the corresponding labels and the compactness value are returned by the function. Basically, you can use only the core of the function, set the number of attempts to 1, initialize labels each time using a custom algorithm, pass them with the ( flags = #KMEANS_USE_INITIAL_LABELS ) flag, and then choose the best (most-compact) clustering.
Parameters:
- data
-
Data for clustering. An array of N-Dimensional points with float coordinates is needed. Examples of this array can be: - Mat points(count, 2, CV_32F); - Mat points(count, 1, CV_32FC2); - Mat points(1, count, CV_32FC2); - std::vector
- K
-
Number of clusters to split the set by.
- bestLabels
-
Input/output integer array that stores the cluster indices for every sample.
- criteria
-
The algorithm termination criteria, that is, the maximum number of iterations and/or the desired accuracy. The accuracy is specified as criteria.epsilon. As soon as each of the cluster centers moves by less than criteria.epsilon on some iteration, the algorithm stops.
- attempts
-
Flag to specify the number of times the algorithm is executed using different initial labellings. The algorithm returns the labels that yield the best compactness (see the last function parameter).
- flags
-
Flag that can take values of cv::KmeansFlags
- centers
-
Output matrix of the cluster centers, one row per each cluster center.
Returns: The function returns the compactness measure that is computed as
kmeans ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
METHODS for PDL::OpenCV::Algorithm
This is a base class for all more or less complex algorithms in OpenCV
especially for classes of algorithms, for which there can be multiple implementations. The examples are stereo correspondence (for which there are algorithms like block matching, semi-global block matching, graph-cut etc.), background subtraction (which can be done using mixture-of-gaussians models, codebook-based algorithm etc.), optical flow (block matching, Lucas-Kanade, Horn-Schunck etc.). Here is example of SimpleBlobDetector use in your application via Algorithm interface: @snippet snippets/core_various.cpp Algorithm
clear
Clears the algorithm state
$obj->clear;
write
simplified API for language bindings *
$obj->write($fs); # with defaults
$obj->write($fs,$name);
@overload
read
Reads algorithm parameters from a file storage
$obj->read($fn);
empty
Returns true if the Algorithm is empty (e.g. in the very beginning or after unsuccessful read
$res = $obj->empty;
save
$obj->save($filename);
Saves the algorithm to a file. In order to make this method work, the derived class must implement Algorithm::write(FileStorage& fs).
getDefaultName
$res = $obj->getDefaultName;
Returns the algorithm string identifier. This string is used as top level xml/yml node tag when the object is saved to a file or string.
METHODS for PDL::OpenCV::DMatch
Class for matching keypoint descriptors
query descriptor index, train descriptor index, train image index, and distance between descriptors.
new
$obj = PDL::OpenCV::DMatch->new;
new2
$obj = PDL::OpenCV::DMatch->new2($_queryIdx,$_trainIdx,$_distance);
new3
$obj = PDL::OpenCV::DMatch->new3($_queryIdx,$_trainIdx,$_imgIdx,$_distance);
METHODS for PDL::OpenCV::FileNode
File Storage Node class.
The node is used to store each and every element of the file storage opened for reading. When XML/YAML file is read, it is first parsed and stored in the memory as a hierarchical collection of nodes. Each node can be a "leaf" that is contain a single number or a string, or be a collection of other nodes. There can be named collections (mappings) where each element has a name and it is accessed by a name, and ordered collections (sequences) where elements do not have names but rather accessed by index. Type of the file node can be determined using FileNode::type method. Note that file nodes are only used for navigating file storages opened for reading. When a file storage is opened for writing, no data is stored in memory after it is written.
new
The constructors.
$obj = PDL::OpenCV::FileNode->new;
These constructors are used to create a default file node, construct it from obsolete structures or from the another file node.
getNode
$res = $obj->getNode($nodename);
@overload
Parameters:
- nodename
-
Name of an element in the mapping node.
at
$res = $obj->at($i);
@overload
Parameters:
- i
-
Index of an element in the sequence node.
FileNode_keys
Signature: (P(); C(); FileNodeWrapper * self; [o] vector_StringWrapper * res)
Returns keys of a mapping node.
$res = $obj->keys;
Returns: Keys of a mapping node.
FileNode_keys ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
type
Returns type of the node.
$res = $obj->type;
Returns: Type of the node. See FileNode::Type
empty
$res = $obj->empty;
isNone
$res = $obj->isNone;
isSeq
$res = $obj->isSeq;
isMap
$res = $obj->isMap;
isInt
$res = $obj->isInt;
isReal
$res = $obj->isReal;
isString
$res = $obj->isString;
isNamed
$res = $obj->isNamed;
name
$res = $obj->name;
size
$res = $obj->size;
rawSize
$res = $obj->rawSize;
real
$res = $obj->real;
Internal method used when reading FileStorage. Sets the type (int, real or string) and value of the previously created node.
string
$res = $obj->string;
FileNode_mat
Signature: ([o,phys] res(l2,c2,r2); FileNodeWrapper * self)
NO BROADCASTING.
$res = $obj->mat;
FileNode_mat ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
METHODS for PDL::OpenCV::FileStorage
XML/YAML/JSON file storage class that encapsulates all the information necessary for writing or reading data to/from a file.
new
The constructors.
$obj = PDL::OpenCV::FileStorage->new;
The full constructor opens the file. Alternatively you can use the default constructor and then call FileStorage::open.
new2
$obj = PDL::OpenCV::FileStorage->new2($filename,$flags); # with defaults
$obj = PDL::OpenCV::FileStorage->new2($filename,$flags,$encoding);
@overload @copydoc open()
open
Opens a file.
$res = $obj->open($filename,$flags); # with defaults
$res = $obj->open($filename,$flags,$encoding);
See description of parameters in FileStorage::FileStorage. The method calls FileStorage::release before opening the file.
Parameters:
- filename
-
Name of the file to open or the text string to read the data from. Extension of the file (.xml, .yml/.yaml or .json) determines its format (XML, YAML or JSON respectively). Also you can append .gz to work with compressed files, for example myHugeMatrix.xml.gz. If both FileStorage::WRITE and FileStorage::MEMORY flags are specified, source is used just to specify the output file format (e.g. mydata.xml, .yml etc.). A file name can also contain parameters. You can use this format, "*?base64" (e.g. "file.json?base64" (case sensitive)), as an alternative to FileStorage::BASE64 flag.
- flags
-
Mode of operation. One of FileStorage::Mode
- encoding
-
Encoding of the file. Note that UTF-16 XML encoding is not supported currently and you should use 8-bit encoding instead of it.
isOpened
Checks whether the file is opened.
$res = $obj->isOpened;
Returns: true if the object is associated with the current file and false otherwise. It is a good practice to call this method after you tried to open a file.
release
Closes the file and releases all the memory buffers.
$obj->release;
Call this method after all I/O operations with the storage are finished.
releaseAndGetString
Closes the file and releases all the memory buffers.
$res = $obj->releaseAndGetString;
Call this method after all I/O operations with the storage are finished. If the storage was opened for writing data and FileStorage::WRITE was specified
getFirstTopLevelNode
Returns the first element of the top-level mapping.
$res = $obj->getFirstTopLevelNode;
Returns: The first element of the top-level mapping.
root
Returns the top-level mapping
$res = $obj->root; # with defaults
$res = $obj->root($streamidx);
Parameters:
- streamidx
-
Zero-based index of the stream. In most cases there is only one stream in the file. However, YAML supports multiple streams and so there can be several.
Returns: The top-level mapping.
getNode
$res = $obj->getNode($nodename);
@overload
write
Simplified writing API to use with bindings. *
$obj->write($name,$val);
*
Parameters:
- name
-
Name of the written object. When writing to sequences (a.k.a. "arrays"), pass an empty string. *
- val
-
Value of the written object.
write2
$obj->write2($name,$val);
write3
$obj->write3($name,$val);
FileStorage_write4
Signature: ([phys] val(l3,c3,r3); FileStorageWrapper * self; StringWrapper* name)
$obj->write4($name,$val);
FileStorage_write4 ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
FileStorage_write5
Signature: (P(); C(); FileStorageWrapper * self; StringWrapper* name; vector_StringWrapper * val)
$obj->write5($name,$val);
FileStorage_write5 ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
writeComment
Writes a comment.
$obj->writeComment($comment); # with defaults
$obj->writeComment($comment,$append);
The function writes a comment into file storage. The comments are skipped when the storage is read.
Parameters:
- comment
-
The written comment, single-line or multi-line
- append
-
If true, the function tries to put the comment at the end of current line. Else if the comment is multi-line, or if it does not fit at the end of the current line, the comment starts a new line.
startWriteStruct
Starts to write a nested structure (sequence or a mapping).
$obj->startWriteStruct($name,$flags); # with defaults
$obj->startWriteStruct($name,$flags,$typeName);
Parameters:
- name
-
name of the structure. When writing to sequences (a.k.a. "arrays"), pass an empty string.
- flags
-
type of the structure (FileNode::MAP or FileNode::SEQ (both with optional FileNode::FLOW)).
- typeName
-
optional name of the type you store. The effect of setting this depends on the storage format. I.e. if the format has a specification for storing type information, this parameter is used.
endWriteStruct
Finishes writing nested structure (should pair startWriteStruct())
$obj->endWriteStruct;
getFormat
Returns the current format. *
$res = $obj->getFormat;
Returns: The current format, see FileStorage::Mode
METHODS for PDL::OpenCV::KeyPoint
Data structure for salient point detectors.
The class instance stores a keypoint, i.e. a point feature found by one of many available keypoint detectors, such as Harris corner detector, #FAST, %StarDetector, %SURF, %SIFT etc. The keypoint is characterized by the 2D position, scale (proportional to the diameter of the neighborhood that needs to be taken into account), orientation and some other parameters. The keypoint neighborhood is then analyzed by another algorithm that builds a descriptor (usually represented as a feature vector). The keypoints representing the same object in different images can then be matched using %KDTree or another method.
new
$obj = PDL::OpenCV::KeyPoint->new;
new2
$obj = PDL::OpenCV::KeyPoint->new2($x,$y,$size); # with defaults
$obj = PDL::OpenCV::KeyPoint->new2($x,$y,$size,$angle,$response,$octave,$class_id);
Parameters:
- x
-
x-coordinate of the keypoint
- y
-
y-coordinate of the keypoint
- size
-
keypoint diameter
- angle
-
keypoint orientation
- response
-
keypoint detector response on the keypoint (that is, strength of the keypoint)
- octave
-
pyramid octave in which the keypoint has been detected
- class_id
-
object id
KeyPoint_convert
Signature: (float [o,phys] points2f(n2=2,n2d0); int [phys] keypointIndexes(n3d0); vector_KeyPointWrapper * keypoints)
NO BROADCASTING.
$points2f = PDL::OpenCV::KeyPoint::convert($keypoints); # with defaults
$points2f = PDL::OpenCV::KeyPoint::convert($keypoints,$keypointIndexes);
This method converts vector of keypoints to vector of points or the reverse, where each keypoint is assigned the same size and the same orientation.
Parameters:
- keypoints
-
Keypoints obtained from any feature detection algorithm like SIFT/SURF/ORB
- points2f
-
Array of (x,y) coordinates of each keypoint
- keypointIndexes
-
Array of indexes of keypoints to be converted to points. (Acts like a mask to convert only specified keypoints)
KeyPoint_convert ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
KeyPoint_convert2
Signature: (float [phys] points2f(n1=2,n1d0); float [phys] size(); float [phys] response(); int [phys] octave(); int [phys] class_id(); [o] vector_KeyPointWrapper * keypoints)
$keypoints = PDL::OpenCV::KeyPoint::convert2($points2f); # with defaults
$keypoints = PDL::OpenCV::KeyPoint::convert2($points2f,$size,$response,$octave,$class_id);
@overload
Parameters:
- points2f
-
Array of (x,y) coordinates of each keypoint
- keypoints
-
Keypoints obtained from any feature detection algorithm like SIFT/SURF/ORB
- size
-
keypoint diameter
- response
-
keypoint detector response on the keypoint (that is, strength of the keypoint)
- octave
-
pyramid octave in which the keypoint has been detected
- class_id
-
object id
KeyPoint_convert2 ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
overlap
$res = PDL::OpenCV::KeyPoint::overlap($kp1,$kp2);
This method computes overlap for pair of keypoints. Overlap is the ratio between area of keypoint regions' intersection and area of keypoint regions' union (considering keypoint region as circle). If they don't overlap, we get zero. If they coincide at same location with same size, we get 1.
Parameters:
- kp1
-
First keypoint
- kp2
-
Second keypoint
METHODS for PDL::OpenCV::Moments
struct returned by cv::moments
The spatial moments \texttt{Moments::m}_{ji}
are computed as: \f[\texttt{m} _{ji}= \sum _{x,y} \left ( \texttt{array} (x,y) \cdot x^j \cdot y^i \right )\f] The central moments \texttt{Moments::mu}_{ji}
are computed as: \f[\texttt{mu} _{ji}= \sum _{x,y} \left ( \texttt{array} (x,y) \cdot (x - \bar{x} )^j \cdot (y - \bar{y} )^i \right )\f] where (\bar{x}, \bar{y})
is the mass center: \f[\bar{x} = \frac{\texttt{m}_{10}}{\texttt{m}_{00}} , \; \bar{y} = \frac{\texttt{m}_{01}}{\texttt{m}_{00}}\f] The normalized central moments \texttt{Moments::nu}_{ij}
are computed as: \f[\texttt{nu} _{ji}= \frac{\texttt{mu}_{ji}}{\texttt{m}_{00}^{(i+j)/2+1}} .\f] @note \texttt{mu}_{00}=\texttt{m}_{00}
, \texttt{nu}_{00}=1
\texttt{nu}_{10}=\texttt{mu}_{10}=\texttt{mu}_{01}=\texttt{mu}_{10}=0
, hence the values are not stored. The moments of a contour are defined in the same way but computed using the Green's formula (see <http://en.wikipedia.org/wiki/Green_theorem>). So, due to a limited raster resolution, the moments computed for a contour are slightly different from the moments computed for the same rasterized contour. @note Since the contour moments are computed using Green formula, you may get seemingly odd results for contours with self-intersections, e.g. a zero area (m00) for butterfly-shaped contours.
METHODS for PDL::OpenCV::RNG
Random Number Generator
Random number generator. It encapsulates the state (currently, a 64-bit integer) and has methods to return scalar random values and to fill arrays with random values. Currently it supports uniform and Gaussian (normal) distributions. The generator uses Multiply-With-Carry algorithm, introduced by G. Marsaglia ( <http://en.wikipedia.org/wiki/Multiply-with-carry> ). Gaussian-distribution random numbers are generated using the Ziggurat algorithm ( <http://en.wikipedia.org/wiki/Ziggurat_algorithm> ), introduced by G. Marsaglia and W. W. Tsang.
new
constructor
$obj = PDL::OpenCV::RNG->new;
These are the RNG constructors. The first form sets the state to some pre-defined value, equal to 2**32-1 in the current implementation. The second form sets the state to the specified value. If you passed state=0 , the constructor uses the above default value instead to avoid the singular random number sequence, consisting of all zeros.
new2
$obj = PDL::OpenCV::RNG->new2($state);
@overload
Parameters:
- state
-
64-bit value used to initialize the RNG.
RNG_fill
Signature: ([io,phys] mat(l2,c2,r2); int [phys] distType(); [phys] a(l4,c4,r4); [phys] b(l5,c5,r5); byte [phys] saturateRange(); RNGWrapper * self)
Fills arrays with random numbers.
$obj->fill($mat,$distType,$a,$b); # with defaults
$obj->fill($mat,$distType,$a,$b,$saturateRange);
Each of the methods fills the matrix with the random values from the specified distribution. As the new numbers are generated, the RNG state is updated accordingly. In case of multiple-channel images, every channel is filled independently, which means that RNG cannot generate samples from the multi-dimensional Gaussian distribution with non-diagonal covariance matrix directly. To do that, the method generates samples from multi-dimensional standard Gaussian distribution with zero mean and identity covariation matrix, and then transforms them using transform to get samples from the specified Gaussian distribution.
Parameters:
- mat
-
2D or N-dimensional matrix; currently matrices with more than 4 channels are not supported by the methods, use Mat::reshape as a possible workaround.
- distType
-
distribution type, RNG::UNIFORM or RNG::NORMAL.
- a
-
first distribution parameter; in case of the uniform distribution, this is an inclusive lower boundary, in case of the normal distribution, this is a mean value.
- b
-
second distribution parameter; in case of the uniform distribution, this is a non-inclusive upper boundary, in case of the normal distribution, this is a standard deviation (diagonal of the standard deviation matrix or the full standard deviation matrix).
- saturateRange
-
pre-saturation flag; for uniform distribution only; if true, the method will first convert a and b to the acceptable value range (according to the mat datatype) and then will generate uniformly distributed random numbers within the range [saturate(a), saturate(b)), if saturateRange=false, the method will generate uniformly distributed random numbers in the original range [a, b) and then will saturate them, it means, for example, that <tt>theRNG().fill(mat_8u, RNG::UNIFORM, -DBL_MAX, DBL_MAX)</tt> will likely produce array mostly filled with 0's and 255's, since the range (0, 255) is significantly smaller than [-DBL_MAX, DBL_MAX).
RNG_fill ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
METHODS for PDL::OpenCV::RNG_MT19937
Mersenne Twister random number generator
Inspired by http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/MT2002/CODES/mt19937ar.c @todo document
METHODS for PDL::OpenCV::RotatedRect
The class represents rotated (i.e. not up-right) rectangles on a plane.
Each rectangle is specified by the center point (mass center), length of each side (represented by #Size2f structure) and the rotation angle in degrees. The sample below demonstrates how to use RotatedRect: @snippet snippets/core_various.cpp RotatedRect_demo ![image](pics/rotatedrect.png) See also: CamShift, fitEllipse, minAreaRect, CvBox2D
new
$obj = PDL::OpenCV::RotatedRect->new;
RotatedRect_new2
Signature: (float [phys] center(n2=2); float [phys] size(n3=2); float [phys] angle(); char * klass; [o] RotatedRectWrapper * res)
$obj = PDL::OpenCV::RotatedRect->new2($center,$size,$angle);
full constructor
Parameters:
- center
-
The rectangle mass center.
- size
-
Width and height of the rectangle.
- angle
-
The rotation angle in a clockwise direction. When the angle is 0, 90, 180, 270 etc., the rectangle becomes an up-right rectangle.
RotatedRect_new2 ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
RotatedRect_boundingRect
Signature: (indx [o,phys] res(n2=4); RotatedRectWrapper * self)
$res = $obj->boundingRect;
returns 4 vertices of the rectangle
Parameters:
- pts
-
The points array for storing rectangle vertices. The order is bottomLeft, topLeft, topRight, bottomRight.
RotatedRect_boundingRect ignores the bad-value flag of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
METHODS for PDL::OpenCV::TermCriteria
The class defining termination criteria for iterative algorithms.
You can initialize it by default constructor and then override any parameters, or the structure may be fully initialized using the advanced variant of the constructor.
new
$obj = PDL::OpenCV::TermCriteria->new;
new2
$obj = PDL::OpenCV::TermCriteria->new2($type,$maxCount,$epsilon);
Parameters:
- type
-
The type of termination criteria, one of TermCriteria::Type
- maxCount
-
The maximum number of iterations or elements to compute.
- epsilon
-
The desired accuracy or change in parameters at which the iterative algorithm stops.
CONSTANTS
- PDL::OpenCV::DECOMP_LU()
- PDL::OpenCV::DECOMP_SVD()
- PDL::OpenCV::DECOMP_EIG()
- PDL::OpenCV::DECOMP_CHOLESKY()
- PDL::OpenCV::DECOMP_QR()
- PDL::OpenCV::DECOMP_NORMAL()
- PDL::OpenCV::NORM_INF()
- PDL::OpenCV::NORM_L1()
- PDL::OpenCV::NORM_L2()
- PDL::OpenCV::NORM_L2SQR()
- PDL::OpenCV::NORM_HAMMING()
- PDL::OpenCV::NORM_HAMMING2()
- PDL::OpenCV::NORM_TYPE_MASK()
- PDL::OpenCV::NORM_RELATIVE()
- PDL::OpenCV::NORM_MINMAX()
- PDL::OpenCV::CMP_EQ()
- PDL::OpenCV::CMP_GT()
- PDL::OpenCV::CMP_GE()
- PDL::OpenCV::CMP_LT()
- PDL::OpenCV::CMP_LE()
- PDL::OpenCV::CMP_NE()
- PDL::OpenCV::GEMM_1_T()
- PDL::OpenCV::GEMM_2_T()
- PDL::OpenCV::GEMM_3_T()
- PDL::OpenCV::DFT_INVERSE()
- PDL::OpenCV::DFT_SCALE()
- PDL::OpenCV::DFT_ROWS()
- PDL::OpenCV::DFT_COMPLEX_OUTPUT()
- PDL::OpenCV::DFT_REAL_OUTPUT()
- PDL::OpenCV::DFT_COMPLEX_INPUT()
- PDL::OpenCV::DCT_INVERSE()
- PDL::OpenCV::DCT_ROWS()
- PDL::OpenCV::BORDER_CONSTANT()
- PDL::OpenCV::BORDER_REPLICATE()
- PDL::OpenCV::BORDER_REFLECT()
- PDL::OpenCV::BORDER_WRAP()
- PDL::OpenCV::BORDER_REFLECT_101()
- PDL::OpenCV::BORDER_TRANSPARENT()
- PDL::OpenCV::BORDER_REFLECT101()
- PDL::OpenCV::BORDER_DEFAULT()
- PDL::OpenCV::BORDER_ISOLATED()
- PDL::OpenCV::ACCESS_READ()
- PDL::OpenCV::ACCESS_WRITE()
- PDL::OpenCV::ACCESS_RW()
- PDL::OpenCV::ACCESS_MASK()
- PDL::OpenCV::ACCESS_FAST()
- PDL::OpenCV::USAGE_DEFAULT()
- PDL::OpenCV::USAGE_ALLOCATE_HOST_MEMORY()
- PDL::OpenCV::USAGE_ALLOCATE_DEVICE_MEMORY()
- PDL::OpenCV::USAGE_ALLOCATE_SHARED_MEMORY()
- PDL::OpenCV::__UMAT_USAGE_FLAGS_32BIT()
- PDL::OpenCV::SORT_EVERY_ROW()
- PDL::OpenCV::SORT_EVERY_COLUMN()
- PDL::OpenCV::SORT_ASCENDING()
- PDL::OpenCV::SORT_DESCENDING()
- PDL::OpenCV::COVAR_SCRAMBLED()
- PDL::OpenCV::COVAR_NORMAL()
- PDL::OpenCV::COVAR_USE_AVG()
- PDL::OpenCV::COVAR_SCALE()
- PDL::OpenCV::COVAR_ROWS()
- PDL::OpenCV::COVAR_COLS()
- PDL::OpenCV::KMEANS_RANDOM_CENTERS()
- PDL::OpenCV::KMEANS_PP_CENTERS()
- PDL::OpenCV::KMEANS_USE_INITIAL_LABELS()
- PDL::OpenCV::REDUCE_SUM()
- PDL::OpenCV::REDUCE_AVG()
- PDL::OpenCV::REDUCE_MAX()
- PDL::OpenCV::REDUCE_MIN()
- PDL::OpenCV::ROTATE_90_CLOCKWISE()
- PDL::OpenCV::ROTATE_180()
- PDL::OpenCV::ROTATE_90_COUNTERCLOCKWISE()
- PDL::OpenCV::CV_8U()
- PDL::OpenCV::CV_8UC1()
- PDL::OpenCV::CV_8UC2()
- PDL::OpenCV::CV_8UC3()
- PDL::OpenCV::CV_8UC4()
- PDL::OpenCV::CV_8UC(int n)
- PDL::OpenCV::CV_8S()
- PDL::OpenCV::CV_8SC1()
- PDL::OpenCV::CV_8SC2()
- PDL::OpenCV::CV_8SC3()
- PDL::OpenCV::CV_8SC4()
- PDL::OpenCV::CV_8SC(int n)
- PDL::OpenCV::CV_16U()
- PDL::OpenCV::CV_16UC1()
- PDL::OpenCV::CV_16UC2()
- PDL::OpenCV::CV_16UC3()
- PDL::OpenCV::CV_16UC4()
- PDL::OpenCV::CV_16UC(int n)
- PDL::OpenCV::CV_16S()
- PDL::OpenCV::CV_16SC1()
- PDL::OpenCV::CV_16SC2()
- PDL::OpenCV::CV_16SC3()
- PDL::OpenCV::CV_16SC4()
- PDL::OpenCV::CV_16SC(int n)
- PDL::OpenCV::CV_32S()
- PDL::OpenCV::CV_32SC1()
- PDL::OpenCV::CV_32SC2()
- PDL::OpenCV::CV_32SC3()
- PDL::OpenCV::CV_32SC4()
- PDL::OpenCV::CV_32SC(int n)
- PDL::OpenCV::CV_32F()
- PDL::OpenCV::CV_32FC1()
- PDL::OpenCV::CV_32FC2()
- PDL::OpenCV::CV_32FC3()
- PDL::OpenCV::CV_32FC4()
- PDL::OpenCV::CV_32FC(int n)
- PDL::OpenCV::CV_64F()
- PDL::OpenCV::CV_64FC1()
- PDL::OpenCV::CV_64FC2()
- PDL::OpenCV::CV_64FC3()
- PDL::OpenCV::CV_64FC4()
- PDL::OpenCV::CV_64FC(int n)
- PDL::OpenCV::CV_PI()
- PDL::OpenCV::CV_2PI()
- PDL::OpenCV::CV_LOG2()
- PDL::OpenCV::INT_MAX()
- PDL::OpenCV::Error::StsOk()
- PDL::OpenCV::Error::StsBackTrace()
- PDL::OpenCV::Error::StsError()
- PDL::OpenCV::Error::StsInternal()
- PDL::OpenCV::Error::StsNoMem()
- PDL::OpenCV::Error::StsBadArg()
- PDL::OpenCV::Error::StsBadFunc()
- PDL::OpenCV::Error::StsNoConv()
- PDL::OpenCV::Error::StsAutoTrace()
- PDL::OpenCV::Error::HeaderIsNull()
- PDL::OpenCV::Error::BadImageSize()
- PDL::OpenCV::Error::BadOffset()
- PDL::OpenCV::Error::BadDataPtr()
- PDL::OpenCV::Error::BadStep()
- PDL::OpenCV::Error::BadModelOrChSeq()
- PDL::OpenCV::Error::BadNumChannels()
- PDL::OpenCV::Error::BadNumChannel1U()
- PDL::OpenCV::Error::BadDepth()
- PDL::OpenCV::Error::BadAlphaChannel()
- PDL::OpenCV::Error::BadOrder()
- PDL::OpenCV::Error::BadOrigin()
- PDL::OpenCV::Error::BadAlign()
- PDL::OpenCV::Error::BadCallBack()
- PDL::OpenCV::Error::BadTileSize()
- PDL::OpenCV::Error::BadCOI()
- PDL::OpenCV::Error::BadROISize()
- PDL::OpenCV::Error::MaskIsTiled()
- PDL::OpenCV::Error::StsNullPtr()
- PDL::OpenCV::Error::StsVecLengthErr()
- PDL::OpenCV::Error::StsFilterStructContentErr()
- PDL::OpenCV::Error::StsKernelStructContentErr()
- PDL::OpenCV::Error::StsFilterOffsetErr()
- PDL::OpenCV::Error::StsBadSize()
- PDL::OpenCV::Error::StsDivByZero()
- PDL::OpenCV::Error::StsInplaceNotSupported()
- PDL::OpenCV::Error::StsObjectNotFound()
- PDL::OpenCV::Error::StsUnmatchedFormats()
- PDL::OpenCV::Error::StsBadFlag()
- PDL::OpenCV::Error::StsBadPoint()
- PDL::OpenCV::Error::StsBadMask()
- PDL::OpenCV::Error::StsUnmatchedSizes()
- PDL::OpenCV::Error::StsUnsupportedFormat()
- PDL::OpenCV::Error::StsOutOfRange()
- PDL::OpenCV::Error::StsParseError()
- PDL::OpenCV::Error::StsNotImplemented()
- PDL::OpenCV::Error::StsBadMemBlock()
- PDL::OpenCV::Error::StsAssert()
- PDL::OpenCV::Error::GpuNotSupported()
- PDL::OpenCV::Error::GpuApiCallError()
- PDL::OpenCV::Error::OpenGlNotSupported()
- PDL::OpenCV::Error::OpenGlApiCallError()
- PDL::OpenCV::Error::OpenCLApiCallError()
- PDL::OpenCV::Error::OpenCLDoubleNotSupported()
- PDL::OpenCV::Error::OpenCLInitError()
- PDL::OpenCV::Error::OpenCLNoAMDBlasFft()
- PDL::OpenCV::FileNode::NONE()
- PDL::OpenCV::FileNode::INT()
- PDL::OpenCV::FileNode::REAL()
- PDL::OpenCV::FileNode::FLOAT()
- PDL::OpenCV::FileNode::STR()
- PDL::OpenCV::FileNode::STRING()
- PDL::OpenCV::FileNode::SEQ()
- PDL::OpenCV::FileNode::MAP()
- PDL::OpenCV::FileNode::TYPE_MASK()
- PDL::OpenCV::FileNode::FLOW()
- PDL::OpenCV::FileNode::UNIFORM()
- PDL::OpenCV::FileNode::EMPTY()
- PDL::OpenCV::FileNode::NAMED()
- PDL::OpenCV::FileStorage::READ()
- PDL::OpenCV::FileStorage::WRITE()
- PDL::OpenCV::FileStorage::APPEND()
- PDL::OpenCV::FileStorage::MEMORY()
- PDL::OpenCV::FileStorage::FORMAT_MASK()
- PDL::OpenCV::FileStorage::FORMAT_AUTO()
- PDL::OpenCV::FileStorage::FORMAT_XML()
- PDL::OpenCV::FileStorage::FORMAT_YAML()
- PDL::OpenCV::FileStorage::FORMAT_JSON()
- PDL::OpenCV::FileStorage::BASE64()
- PDL::OpenCV::FileStorage::WRITE_BASE64()
- PDL::OpenCV::FileStorage::UNDEFINED()
- PDL::OpenCV::FileStorage::VALUE_EXPECTED()
- PDL::OpenCV::FileStorage::NAME_EXPECTED()
- PDL::OpenCV::FileStorage::INSIDE_MAP()
- PDL::OpenCV::Formatter::FMT_DEFAULT()
- PDL::OpenCV::Formatter::FMT_MATLAB()
- PDL::OpenCV::Formatter::FMT_CSV()
- PDL::OpenCV::Formatter::FMT_PYTHON()
- PDL::OpenCV::Formatter::FMT_NUMPY()
- PDL::OpenCV::Formatter::FMT_C()
- PDL::OpenCV::Mat::MAGIC_VAL()
- PDL::OpenCV::Mat::AUTO_STEP()
- PDL::OpenCV::Mat::CONTINUOUS_FLAG()
- PDL::OpenCV::Mat::SUBMATRIX_FLAG()
- PDL::OpenCV::Mat::MAGIC_MASK()
- PDL::OpenCV::Mat::TYPE_MASK()
- PDL::OpenCV::Mat::DEPTH_MASK()
- PDL::OpenCV::PCA::DATA_AS_ROW()
- PDL::OpenCV::PCA::DATA_AS_COL()
- PDL::OpenCV::PCA::USE_AVG()
- PDL::OpenCV::Param::INT()
- PDL::OpenCV::Param::BOOLEAN()
- PDL::OpenCV::Param::REAL()
- PDL::OpenCV::Param::STRING()
- PDL::OpenCV::Param::MAT()
- PDL::OpenCV::Param::MAT_VECTOR()
- PDL::OpenCV::Param::ALGORITHM()
- PDL::OpenCV::Param::FLOAT()
- PDL::OpenCV::Param::UNSIGNED_INT()
- PDL::OpenCV::Param::UINT64()
- PDL::OpenCV::Param::UCHAR()
- PDL::OpenCV::Param::SCALAR()
- PDL::OpenCV::RNG::UNIFORM()
- PDL::OpenCV::RNG::NORMAL()
- PDL::OpenCV::SVD::MODIFY_A()
- PDL::OpenCV::SVD::NO_UV()
- PDL::OpenCV::SVD::FULL_UV()
- PDL::OpenCV::SparseMat::MAGIC_VAL()
- PDL::OpenCV::SparseMat::MAX_DIM()
- PDL::OpenCV::SparseMat::HASH_SCALE()
- PDL::OpenCV::SparseMat::HASH_BIT()
- PDL::OpenCV::TermCriteria::COUNT()
- PDL::OpenCV::TermCriteria::MAX_ITER()
- PDL::OpenCV::TermCriteria::EPS()
- PDL::OpenCV::UMat::MAGIC_VAL()
- PDL::OpenCV::UMat::AUTO_STEP()
- PDL::OpenCV::UMat::CONTINUOUS_FLAG()
- PDL::OpenCV::UMat::SUBMATRIX_FLAG()
- PDL::OpenCV::UMat::MAGIC_MASK()
- PDL::OpenCV::UMat::TYPE_MASK()
- PDL::OpenCV::UMat::DEPTH_MASK()
- PDL::OpenCV::UMatData::COPY_ON_MAP()
- PDL::OpenCV::UMatData::HOST_COPY_OBSOLETE()
- PDL::OpenCV::UMatData::DEVICE_COPY_OBSOLETE()
- PDL::OpenCV::UMatData::TEMP_UMAT()
- PDL::OpenCV::UMatData::TEMP_COPIED_UMAT()
- PDL::OpenCV::UMatData::USER_ALLOCATED()
- PDL::OpenCV::UMatData::DEVICE_MEM_MAPPED()
- PDL::OpenCV::UMatData::ASYNC_CLEANUP()
- PDL::OpenCV::_InputArray::KIND_SHIFT()
- PDL::OpenCV::_InputArray::FIXED_TYPE()
- PDL::OpenCV::_InputArray::FIXED_SIZE()
- PDL::OpenCV::_InputArray::KIND_MASK()
- PDL::OpenCV::_InputArray::NONE()
- PDL::OpenCV::_InputArray::MAT()
- PDL::OpenCV::_InputArray::MATX()
- PDL::OpenCV::_InputArray::STD_VECTOR()
- PDL::OpenCV::_InputArray::STD_VECTOR_VECTOR()
- PDL::OpenCV::_InputArray::STD_VECTOR_MAT()
- PDL::OpenCV::_InputArray::EXPR()
- PDL::OpenCV::_InputArray::OPENGL_BUFFER()
- PDL::OpenCV::_InputArray::CUDA_HOST_MEM()
- PDL::OpenCV::_InputArray::CUDA_GPU_MAT()
- PDL::OpenCV::_InputArray::UMAT()
- PDL::OpenCV::_InputArray::STD_VECTOR_UMAT()
- PDL::OpenCV::_InputArray::STD_BOOL_VECTOR()
- PDL::OpenCV::_InputArray::STD_VECTOR_CUDA_GPU_MAT()
- PDL::OpenCV::_InputArray::STD_ARRAY()
- PDL::OpenCV::_InputArray::STD_ARRAY_MAT()
- PDL::OpenCV::_OutputArray::DEPTH_MASK_8U()
- PDL::OpenCV::_OutputArray::DEPTH_MASK_8S()
- PDL::OpenCV::_OutputArray::DEPTH_MASK_16U()
- PDL::OpenCV::_OutputArray::DEPTH_MASK_16S()
- PDL::OpenCV::_OutputArray::DEPTH_MASK_32S()
- PDL::OpenCV::_OutputArray::DEPTH_MASK_32F()
- PDL::OpenCV::_OutputArray::DEPTH_MASK_64F()
- PDL::OpenCV::_OutputArray::DEPTH_MASK_16F()
- PDL::OpenCV::_OutputArray::DEPTH_MASK_ALL()
- PDL::OpenCV::_OutputArray::DEPTH_MASK_ALL_BUT_8S()
- PDL::OpenCV::_OutputArray::DEPTH_MASK_ALL_16F()
- PDL::OpenCV::_OutputArray::DEPTH_MASK_FLT()
BUGS
Please report bugs at https://github.com/PDLPorters/PDL-OpenCV/issues, or on the mailing list(s) at https://pdl.perl.org/?page=mailing-lists.
AUTHOR
Ingo Schmid and the PDL Porters. Same terms as PDL itself.