c++ OPENCV 图像旋转
时间: 2025-06-01 09:06:45 浏览: 20
### 图像旋转的实现方法
在C++中使用OpenCV库可以轻松实现图像旋转功能。以下是一个完整的代码示例,展示如何通过指定角度和缩放比例来旋转图像[^4]。
```cpp
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
void rotate_image(const Mat &input, Mat &output, double angle) {
// 获取图像中心点
Point2f center(input.cols / 2.0, input.rows / 2.0);
// 创建旋转矩阵
Mat rotation_matrix = getRotationMatrix2D(center, angle, 1.0);
// 计算旋转后的边界
Rect bbox = RotatedRect(Point2f(), input.size(), angle).boundingRect();
// 调整旋转矩阵以适应新的边界
rotation_matrix.at<double>(0, 2) += bbox.width / 2.0 - center.x;
rotation_matrix.at<double>(1, 2) += bbox.height / 2.0 - center.y;
// 应用仿射变换进行旋转
warpAffine(input, output, rotation_matrix, bbox.size());
}
int main() {
// 读取图像
Mat src = imread("D:/img/girlExample.jpg");
if (src.empty()) {
cout << "load image failed...\n";
return -1;
}
// 显示原始图像
imshow("输入图像", src);
// 创建输出图像
Mat rotated;
// 调用旋转函数,设置旋转角度为45度
rotate_image(src, rotated, 45.0);
// 显示旋转后的图像
imshow("旋转后的图像", rotated);
// 等待用户按键
waitKey(0);
destroyAllWindows();
return 0;
}
```
上述代码中,`getRotationMatrix2D` 函数用于生成旋转矩阵,`warpAffine` 函数则应用该矩阵对图像进行旋转操作[^4]。此外,为了确保旋转后图像不会被裁剪,需要调整旋转矩阵以适应新的边界大小。
### 相关知识点补充
- **旋转矩阵**:通过 `getRotationMatrix2D` 函数生成,包含旋转角度、旋转中心以及缩放比例等参数。
- **边界调整**:为了避免图像旋转后被裁剪,需计算旋转后的边界并调整旋转矩阵中的平移部分。
- **角度单位**:旋转角度以度为单位,正值表示逆时针旋转,负值表示顺时针旋转。
### 注意事项
如果需要处理不同大小或形状的图像,建议根据具体需求动态调整旋转中心和边界大小。此外,对于高分辨率图像,旋转操作可能会消耗较多计算资源,因此应优化代码以提高性能。
阅读全文
相关推荐


















