C++Opencv图像的翻转与旋转

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);
}

图像翻转
C++Opencv图像的翻转与旋转_第1张图片
图像旋转

//图像旋转
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(0, 0));
	double sin = abs(M.at(0, 1));
	int nw = cos * w + sin * h;
	int nh = sin * w + cos * h;
	M.at(0, 2) += (nw / 2 - w / 2);
	M.at(1, 2) += (nh / 2 - h / 2);
	warpAffine(image, dst, M, Size(nw, nh), INTER_LINEAR, 0, Scalar(255, 255, 0));
	imshow("旋转演示", dst);
}

C++Opencv图像的翻转与旋转_第2张图片

你可能感兴趣的:(Opencv(C++),opencv,c++,计算机视觉)