The functions in this section perform various geometrical transformations of 2D images. That is, they do not change the image content, but deform the pixel grid, and map this deformed grid to the destination image. In fact, to avoid sampling artifacts, the mapping is done in the reverse order, from destination to the source. That is, for each pixel
of the destination image, the functions compute coordinates of the corresponding “donor” pixel in the source image and copy the pixel value, that is:

In the case when the user specifies the forward mapping:
, the OpenCV functions first compute the corresponding inverse mapping:
and then use the above formula.
The actual implementations of the geometrical transformations, from the most generic Remap and to the simplest and the fastest Resize , need to solve the 2 main problems with the above formula:
one of
or
, or they both, may fall outside of the image, in which case some extrapolation method needs to be used. OpenCV provides the same selection of the extrapolation methods as in the filtering functions, but also an additional method
BORDER_TRANSPARENT
, which means that the corresponding pixels in the destination image will not be modified at all.
and
are floating-point numbers (i.e.
can be an affine or perspective transformation, or radial lens distortion correction etc.), so a pixel values at fractional coordinates needs to be retrieved. In the simplest case the coordinates can be just rounded to the nearest integer coordinates and the corresponding pixel used, which is called nearest-neighbor interpolation. However, a better result can be achieved by using more sophisticated
interpolation methods
, where a polynomial function is fit into some neighborhood of the computed pixel
and then the value of the polynomial at
is taken as the interpolated pixel value. In OpenCV you can choose between several interpolation methods, see
Resize
.Calculates the affine matrix of 2d rotation.
| Parameters: |
|
|---|
The function cv2DRotationMatrix calculates the following matrix:

where

The transformation maps the rotation center to itself. If this is not the purpose, the shift should be adjusted.
Calculates the affine transform from 3 corresponding points.
| Parameters: |
|
|---|
The function cvGetAffineTransform calculates the matrix of an affine transform such that:

where

Calculates the perspective transform from 4 corresponding points.
| Parameters: |
|
|---|
The function cvGetPerspectiveTransform calculates a matrix of perspective transforms such that:

where

Retrieves the pixel quadrangle from an image with sub-pixel accuracy.
| Parameters: |
|---|
The function cvGetQuadrangleSubPix extracts pixels from src at sub-pixel accuracy and stores them to dst as follows:

where

and

The values of pixels at non-integer coordinates are retrieved using bilinear interpolation. When the function needs pixels outside of the image, it uses replication border mode to reconstruct the values. Every channel of multiple-channel images is processed independently.
Retrieves the pixel rectangle from an image with sub-pixel accuracy.
| Parameters: |
|
|---|
The function cvGetRectSubPix extracts pixels from src :

where the values of the pixels at non-integer coordinates are retrieved using bilinear interpolation. Every channel of multiple-channel images is processed independently. While the rectangle center must be inside the image, parts of the rectangle may be outside. In this case, the replication border mode is used to get pixel values beyond the image boundaries.
Remaps an image to log-polar space.
| Parameters: |
|
|---|
The function cvLogPolar transforms the source image using the following transformation:
Forward transformation ( CV_WARP_INVERSE_MAP is not set):

Inverse transformation ( CV_WARP_INVERSE_MAP is set):

where

The function emulates the human “foveal” vision and can be used for fast scale and rotation-invariant template matching, for object tracking and so forth. The function can not operate in-place.
Applies a generic geometrical transformation to the image.
| Parameters: |
|
|---|
The function cvRemap transforms the source image using the specified map:

Similar to other geometrical transformations, some interpolation method (specified by user) is used to extract pixels with non-integer coordinates. Note that the function can not operate in-place.
Resizes an image.
| Parameters: |
|
|---|
The function cvResize resizes an image src so that it fits exactly into dst . If ROI is set, the function considers the ROI as supported.
Applies an affine transformation to an image.
| Parameters: |
|
|---|
The function cvWarpAffine transforms the source image using the specified matrix:

where

The function is similar to GetQuadrangleSubPix but they are not exactly the same. WarpAffine requires input and output image have the same data type, has larger overhead (so it is not quite suitable for small images) and can leave part of destination image unchanged. While GetQuadrangleSubPix may extract quadrangles from 8-bit images into floating-point buffer, has smaller overhead and always changes the whole destination image content. Note that the function can not operate in-place.
To transform a sparse set of points, use the Transform function from cxcore.
Applies a perspective transformation to an image.
| Parameters: |
|
|---|
The function cvWarpPerspective transforms the source image using the specified matrix:

Note that the function can not operate in-place. For a sparse set of points use the PerspectiveTransform function from CxCore.