mirror of
https://github.com/opencv/opencv.git
synced 2025-06-07 09:25:45 +08:00
Merge pull request #7539 from Tetragramm:90DegreeRotations
This commit is contained in:
commit
6b7d570c34
@ -1022,6 +1022,24 @@ around both axes.
|
||||
*/
|
||||
CV_EXPORTS_W void flip(InputArray src, OutputArray dst, int flipCode);
|
||||
|
||||
enum RotateFlags {
|
||||
ROTATE_90_CLOCKWISE = 0, //Rotate 90 degrees clockwise
|
||||
ROTATE_180 = 1, //Rotate 180 degrees clockwise
|
||||
ROTATE_90_COUNTERCLOCKWISE = 2, //Rotate 270 degrees clockwise
|
||||
};
|
||||
/** @brief Rotates a 2D array in multiples of 90 degrees.
|
||||
The function rotate rotates the array in one of three different ways:
|
||||
* Rotate by 90 degrees clockwise (rotateCode = ROTATE_90).
|
||||
* Rotate by 180 degrees clockwise (rotateCode = ROTATE_180).
|
||||
* Rotate by 270 degrees clockwise (rotateCode = ROTATE_270).
|
||||
@param src input array.
|
||||
@param 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 and ROTATE_270.
|
||||
@param rotateCode an enum to specify how to rotate the array; see the enum RotateFlags
|
||||
@sa transpose , repeat , completeSymm, flip, RotateFlags
|
||||
*/
|
||||
CV_EXPORTS_W void rotate(InputArray src, OutputArray dst, int rotateCode);
|
||||
|
||||
/** @brief Fills the output array with repeated copies of the input array.
|
||||
|
||||
The function cv::repeat duplicates the input array one or more times along each of the two axes:
|
||||
|
@ -826,6 +826,54 @@ void flip( InputArray _src, OutputArray _dst, int flip_mode )
|
||||
flipHoriz( dst.ptr(), dst.step, dst.ptr(), dst.step, dst.size(), esz );
|
||||
}
|
||||
|
||||
#ifdef HAVE_OPENCL
|
||||
|
||||
static bool ocl_rotate(InputArray _src, OutputArray _dst, int rotateMode)
|
||||
{
|
||||
switch (rotateMode)
|
||||
{
|
||||
case ROTATE_90_CLOCKWISE:
|
||||
transpose(_src, _dst);
|
||||
flip(_dst, _dst, 1);
|
||||
break;
|
||||
case ROTATE_180:
|
||||
flip(_src, _dst, -1);
|
||||
break;
|
||||
case ROTATE_90_COUNTERCLOCKWISE:
|
||||
transpose(_src, _dst);
|
||||
flip(_dst, _dst, 0);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
#endif
|
||||
|
||||
void rotate(InputArray _src, OutputArray _dst, int rotateMode)
|
||||
{
|
||||
CV_Assert(_src.dims() <= 2);
|
||||
|
||||
CV_OCL_RUN(_dst.isUMat(), ocl_rotate(_src, _dst, rotateMode))
|
||||
|
||||
switch (rotateMode)
|
||||
{
|
||||
case ROTATE_90_CLOCKWISE:
|
||||
transpose(_src, _dst);
|
||||
flip(_dst, _dst, 1);
|
||||
break;
|
||||
case ROTATE_180:
|
||||
flip(_src, _dst, -1);
|
||||
break;
|
||||
case ROTATE_90_COUNTERCLOCKWISE:
|
||||
transpose(_src, _dst);
|
||||
flip(_dst, _dst, 0);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
#if defined HAVE_OPENCL && !defined __APPLE__
|
||||
|
||||
static bool ocl_repeat(InputArray _src, int ny, int nx, OutputArray _dst)
|
||||
|
Loading…
Reference in New Issue
Block a user