一、翻转(90 / 180 / 270)
进行旋转 90、180、270 度时,需要用到 transpose 和 flip 函数,
1、transpose
函数声明:
void transpose(InputArray src, OutputArray dst);
transpose 函数用来实现矩阵转置,输出为转置后的矩阵。
相关代码:
Mat src, dst;
src = imread("C:\\Users\\Ru\\Desktop\\cat.jpg");
transpose(src, dst);
转置前:
转置后,所有坐标点由 (x,y) 转换为 (y,x):
2、flip
函数声明:
void flip(InputArray src, OutputArray dst, int flipCode);
flip 函数用来进行图像翻转,flipCode >0: 沿y-轴翻转, 0: 沿x-轴翻转, <0: x、y轴同时翻转。
顺时针旋转 90 度(向右旋转 90 度):
Mat src = imread("C:\\Users\\Ru\\Desktop\\cat.jpg");
transpose(src, src);
flip(src, src, 1);
顺时针旋转 180 度(水平翻转 + 垂直翻转):
Mat src = imread("C:\\Users\\Ru\\Desktop\\cat.jpg");
flip(src, src , 0);
flip(src, src, 1);
或者:
Mat src = imread("C:\\Users\\Ru\\Desktop\\cat.jpg");
flip(src, src, -1);
顺时针旋转 270 度(向左旋转 90 度):
Mat src = imread("C:\\Users\\Ru\\Desktop\\cat.jpg");
transpose(src, src);
flip(src, src, 0);
二、翻转( 任意角度 )
代码示例:
项目组其他小伙伴写的,我抄袭一下~
void rotateMax(cv::Mat src, cv::Mat& dst)
{
// 逆时针旋转角度
double angle = 45;
cv::Size src_sz = src.size();
cv::Size dst_sz(src_sz.width, src_sz.height);
// 设定旋转中心
cv::Point center = cv::Point(src.cols / 2, src.rows / 2);
// 获得仿射变换矩阵
cv::Mat rot_mat = cv::getRotationMatrix2D(center, angle, 1.0);
cv::Rect bbox = cv::RotatedRect(center, src.size(), angle).boundingRect();
rot_mat.at<double>(0, 2) += bbox.width / 2.0 - center.x;
rot_mat.at<double>(1, 2) += bbox.height / 2.0 - center.y;
cv::warpAffine(src, dst, rot_mat, bbox.size());
}
效果图:
建议:
如果要使得添加的背景为白色,可以反色一下。