mirror of
https://github.com/opencv/opencv.git
synced 2025-06-07 17:44:04 +08:00
Add 90 degree rotation methods. This provides a quick simple way of doing 90 degree rotations.
Also fix warnings that show up on other compilers in test builds.
This commit is contained in:
parent
44e5d26312
commit
6f7bf653f7
@ -1022,6 +1022,24 @@ around both axes.
|
|||||||
*/
|
*/
|
||||||
CV_EXPORTS_W void flip(InputArray src, OutputArray dst, int flipCode);
|
CV_EXPORTS_W void flip(InputArray src, OutputArray dst, int flipCode);
|
||||||
|
|
||||||
|
enum RotateFlags {
|
||||||
|
ROTATE_90 = 0, //Rotate 90 degrees clockwise
|
||||||
|
ROTATE_180 = 1, //Rotate 180 degrees clockwise
|
||||||
|
ROTATE_270 = 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.
|
/** @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:
|
The function cv::repeat duplicates the input array one or more times along each of the two axes:
|
||||||
|
@ -826,6 +826,50 @@ void flip( InputArray _src, OutputArray _dst, int flip_mode )
|
|||||||
flipHoriz( dst.ptr(), dst.step, dst.ptr(), dst.step, dst.size(), esz );
|
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:
|
||||||
|
flip(_src.getUMat().t(), _dst, 1);
|
||||||
|
break;
|
||||||
|
case ROTATE_180:
|
||||||
|
flip(_src, _dst, -1);
|
||||||
|
break;
|
||||||
|
case ROTATE_270:
|
||||||
|
flip(_src.getUMat().t(), _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:
|
||||||
|
flip(_src.getMat().t(), _dst, 1);
|
||||||
|
break;
|
||||||
|
case ROTATE_180:
|
||||||
|
flip(_src, _dst, -1);
|
||||||
|
break;
|
||||||
|
case ROTATE_270:
|
||||||
|
flip(_src.getMat().t(), _dst, 0);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#if defined HAVE_OPENCL && !defined __APPLE__
|
#if defined HAVE_OPENCL && !defined __APPLE__
|
||||||
|
|
||||||
static bool ocl_repeat(InputArray _src, int ny, int nx, OutputArray _dst)
|
static bool ocl_repeat(InputArray _src, int ny, int nx, OutputArray _dst)
|
||||||
|
Loading…
Reference in New Issue
Block a user