warpAffine函数介绍
warpAffine函数是OpenCV中的一个函数,用于对图像进行仿射变换,包括旋转、缩放、平移等操作。该函数可以对图像进行二维或三维的仿射变换,支持多种插值方法和输出图像格式。
warpAffine
是OpenCV中的一个函数,用于对图像进行仿射变换,包括旋转、缩放、平移等操作。该函数可以对图像进行二维或三维的仿射变换,支持多种插值方法和输出图像格式。
函数原型如下:
void warpAffine(InputArray src, OutputArray dst, InputArray M, int flags = INTER_LINEAR, int borderMode = BORDER_CONSTANT, const Scalar& borderValue = Scalar());
其中,参数含义如下:
src
:输入图像,类型为cv::InputArray,
可以是单通道或多通道的灰度图或彩色图。dst
:输出图像,类型为cv::OutputArray,
表示变换后的图像。M
:变换矩阵,类型为cv::InputArray,
是一个3x3的浮点型矩阵,表示二维仿射变换的变换参数。flags
:插值方法标志,类型为int,
默认值为INTER_LINEAR,
表示使用线性插值方法。其他可选值包括INTER_NEAREST
、INTER_AREA
、INTER_CUBIC
等。borderMode
:边界处理方式,类型为int
,默认值为BORDER_CONSTANT,
表示使用常量像素填充边界。其他可选值包括BORDER_REPLICATE
、BORDER_REFLECT
、BORDER_WRAP
等。borderValue
:边界像素值,类型为Scalar
,默认值为0。当边界处理方式为BORDER_CONSTANT
时,该参数指定了边界像素的值。
getRotationMatrix2D函数介绍
getRotationMatrix2D
是OpenCV中的一个函数,用于获取二维旋转矩阵。该函数可以对图像进行仿射变换,包括旋转、缩放、平移等操作。
函数原型如下:
Mat getRotationMatrix2D(Point2f center, double angle, double scale);
其中,参数含义如下:
center
:旋转中心点坐标,类型为cv::Point2f,
表示二维平面上的点。angle
:旋转角度,单位为弧度,类型为double
。正值表示逆时针旋转,负值表示顺时针旋转。scale
:缩放比例,类型为double
。- 返回值为旋转矩阵,类型为
cv::Mat,
是一个3x3的浮点型矩阵。
如何OpenCV使用图像旋转
我们可以使用warpAffine
函数和getRotationMatrix2D函数进行图像旋转
。
以下是一个示例代码:
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main(int argc, char** argv)
{
// 读取输入图像
Mat src = imread("simple_chart.png", IMREAD_COLOR);
if (src.empty())
{
cout << "Failed to load image" << endl;
return -1;
}
// 将原始图像显示出来
imshow("Origin Image", src);
waitKey(0);
// 定义输出图像的大小和类型
int dst_width = src.cols * 1;
int dst_height = src.rows * 1;
Mat dst(dst_height, dst_width, src.type());
// 定义旋转中心点和旋转角度
Point2f center(src.cols / 2.0, src.rows / 2.0);
double angle = 45.0; // 逆时针旋转角度为45度
// 定义旋转矩阵
Mat rot_mat = getRotationMatrix2D(center, angle, 1.0);
// 对输入图像进行仿射变换,并将结果存储到输出图像中
warpAffine(src, dst, rot_mat, Size(dst.cols, dst.rows));
// 将输出图像显示出来
imshow("Output Image", dst);
// 等待按键并关闭窗口
waitKey(0);
return 0;
}
代码解释
这段代码首先读取输入图像,然后定义输出图像的大小和类型。接着,定义旋转中心点和旋转角度,并使用getRotationMatrix2D
函数创建一个旋转矩阵。最后,调用warpAffine
函数对输入图像进行仿射变换,并将结果存储到输出图像中。最终,将输出图像显示出来。
运行结果
原始图如下:
旋转之后: