- 操作系统:ubuntu22.04
- OpenCV版本:OpenCV4.9
- IDE:Visual Studio Code
- 编程语言:C++11
算法描述
计算二维旋转的仿射矩阵。
该函数计算以下矩阵:
[ α β ( 1 − α ) ⋅ center.x − β ⋅ center.y − β α β ⋅ center.x + ( 1 − α ) ⋅ center.y ] \begin{bmatrix} \alpha & \beta & (1- \alpha ) \cdot \texttt{center.x} - \beta \cdot \texttt{center.y} \\ - \beta & \alpha & \beta \cdot \texttt{center.x} + (1- \alpha ) \cdot \texttt{center.y} \end{bmatrix} [α−ββα(1−α)⋅center.x−β⋅center.yβ⋅center.x+(1−α)⋅center.y]
其中,
α = scale ⋅ cos angle , β = scale ⋅ sin angle \begin{array}{l} \alpha = \texttt{scale} \cdot \cos \texttt{angle} , \\ \beta = \texttt{scale} \cdot \sin \texttt{angle} \end{array} α=scale⋅cosangle,β=scale⋅sinangle
该变换将旋转中心映射到自身。如果不是目标,则调整平移。
getRotationMatrix2D() 函数用于计算一个 2×3 的仿射矩阵,该矩阵可以用于将图像绕着指定的中心点进行旋转和缩放。
函数原型
cpp
Mat cv::getRotationMatrix2D
(
Point2f center,
double angle,
double scale
)
参数
- 参数center 旋转在源图像中的中心。
- 参数angle 旋转角度(以度为单位)。正值表示逆时针旋转(坐标原点假定为图像的左上角)。
- 参数scale 各向同性的缩放因子。
代码示例
cpp
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main()
{
// 加载图像
Mat src = imread("/media/dingxin/data/study/OpenCV/sources/images/fruit_small.jpg");
if (src.empty())
{
cout << "Error: Image not found." << endl;
return -1;
}
// 定义旋转中心
Point2f center(src.cols / 2.0f, src.rows / 2.0f);
// 定义旋转角度和缩放因子
double angle = 45.0; // 旋转角度
double scale = 1.0; // 缩放因子
// 获取旋转矩阵
Mat rotMat = getRotationMatrix2D(center, angle, scale);
// 应用旋转
Mat rotatedImage;
warpAffine(src, rotatedImage, rotMat, src.size());
// 显示原图像和旋转后的图像
namedWindow("Original Image", WINDOW_NORMAL);
imshow("Original Image", src);
namedWindow("Rotated Image", WINDOW_NORMAL);
imshow("Rotated Image", rotatedImage);
// 等待按键并关闭窗口
waitKey(0);
destroyAllWindows();
return 0;
}