1.图像翻转flip()
void cv::flip(InputArray src,OutputArray dst,int flipCode);
参数说明:
InputArray src:要处理的原始图像
OutputArray dst:是和src具有相同大小、类型的目标图像
int flipCode:旋转类型
flipCode = 0:x轴方向旋转
flipCode > 0:y轴方向旋转
flipCode < 0:x轴y轴方向同时旋转
2.仿射变换
void cv::warpAffine (InputArray src, OutputArray dst, InputArray M, Size dsize,
int flags = INTER_LINEAR, int borderMode = BORDER_CONSTANT,const Scalar &borderValue = Scalar())
src: 输入图像
dst: 输出图像,尺寸由dsize指定,图像类型与原图像一致
M: 2X3的变换矩阵
dsize: 指定图像输出尺寸
flags: 插值算法标识符,有默认值INTER_LINEAR
borderMode: 边界像素模式,有默认值BORDER_CONSTANT
borderValue: 边界取值,有默认值Scalar()即0
3.getRotationMatrix2D函数
Mat cv::getRotationMatrix2D(Point2f center, double angle, double scale )
参数解释
. center: Point2f类型,表示原图像的旋转中心
. angle: double类型,表示图像旋转角度,角度为正则表示逆时针旋转,角度为负表示逆时针旋转(坐标原点是图像左上角)
. scale: 缩放系数
示例代码
//图像翻转
void flip_demo(Mat &image) {
Mat dst;
//flip(image, dst, 0); //上下翻转
//flip(image, dst, 1); //左右翻转
flip(image, dst, -1); //对角线翻转 180°旋转
imshow("图像翻转",dst);
}
图像翻转
图像旋转
//图像旋转
void rotate_demo(Mat &image) {
Mat dst, M;
int w = image.cols;
int h = image.rows;
M = getRotationMatrix2D(Point2f(w / 2, h / 2), 45, 1.0);
double cos = abs(M.at<double>(0, 0));
double sin = abs(M.at<double>(0, 1));
int nw = cos * w + sin * h;
int nh = sin * w + cos * h;
M.at<double>(0, 2) += (nw / 2 - w / 2);
M.at<double>(1, 2) += (nh / 2 - h / 2);
warpAffine(image, dst, M, Size(nw, nh), INTER_LINEAR, 0, Scalar(255, 255, 0));
imshow("旋转演示", dst);
}