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:
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.
#include <cv.h>
#include <highgui.h>
int main(int argc, char** argv)
{
IplImage* src;
if( argc == 2 && (src=cvLoadImage(argv[1],1) != 0 )
{
IplImage* dst = cvCreateImage( cvSize(256,256), 8, 3 );
IplImage* src2 = cvCreateImage( cvGetSize(src), 8, 3 );
cvLogPolar( src, dst, cvPoint2D32f(src->width/2,src->height/2), 40,
CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS );
cvLogPolar( dst, src2, cvPoint2D32f(src->width/2,src->height/2), 40,
CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS+CV_WARP_INVERSE_MAP );
cvNamedWindow( "log-polar", 1 );
cvShowImage( "log-polar", dst );
cvNamedWindow( "inverse log-polar", 1 );
cvShowImage( "inverse log-polar", src2 );
cvWaitKey();
}
return 0;
}
And this is what the program displays when opencv/samples/c/fruits.jpg is passed to it
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.