opencv图像旋转.
时间: 2025-05-31 08:56:33 浏览: 20
### 使用OpenCV进行图像旋转的方法
在计算机视觉领域,OpenCV 提供了多种方法来实现图像的旋转操作。这些方法可以满足不同的需求场景,例如基于仿射变换的自定义旋转、固定角度的快速旋转以及更复杂的几何变换。
#### 基于 `cv2.getRotationMatrix2D` 的通用旋转
这是最常用的一种方式,允许用户指定旋转中心、旋转角度和缩放比例。通过调用该函数生成一个 2×3 的仿射变换矩阵,并将其应用于目标图像完成旋转操作[^1]。
```python
import cv2
# 加载原始图像
image = cv2.imread('input_image.jpg')
# 获取图像的高度和宽度
(h, w) = image.shape[:2]
# 定义旋转参数
center = (w // 2, h // 2) # 设置旋转中心为图像中心
angle = 45 # 设定旋转角度(正数表示逆时针)
scale = 1.0 # 缩放因子
# 计算旋转矩阵
rotation_matrix = cv2.getRotationMatrix2D(center=center, angle=angle, scale=scale)
# 应用仿射变换执行旋转
rotated_image = cv2.warpAffine(image, rotation_matrix, (w, h))
# 展示结果
cv2.imshow("Original Image", image)
cv2.imshow("Rotated Image", rotated_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
此代码片段展示了如何利用 OpenCV 实现围绕图像中心点按给定角度旋转的功能[^1]。
---
#### 利用 `cv2.rotate` 进行预设角度旋转
如果仅需对图像应用固定的旋转角度(如 90° 或 180°),可以直接使用 `cv2.rotate()` 函数简化流程[^4]。
```python
import cv2
# 加载输入图像
image = cv2.imread('input_image.jpg')
# 执行顺时针方向上的 90 度旋转
rotated_image = cv2.rotate(image, cv2.ROTATE_90_CLOCKWISE)
# 可选其他选项:
# cv2.ROTATE_180 -> 旋转 180 度
# cv2.ROTATE_90_COUNTERCLOCKWISE -> 逆时针旋转 90 度
# 显示处理后的图像
cv2.imshow("Rotated by Fixed Angle", rotated_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
这种方法适用于不需要灵活调整旋转角度的情况,能够显著减少计算复杂度[^4]。
---
#### 结合 Matplotlib 可视化效果对比
为了更好地观察不同旋转策略的效果差异,还可以借助 Matplotlib 将原图与经过各种旋转变换的结果一同展示出来。
```python
import cv2
import matplotlib.pyplot as plt
# 载入测试素材
src = cv2.imread('test_image.png')
(rows, cols, _) = src.shape
# 方案一:标准 API 自由旋转
M_free_rot = cv2.getRotationMatrix2D((cols / 2, rows / 2), angle=30, scale=0.7)
free_rot_result = cv2.warpAffine(src, M_free_rot, dsize=(cols, rows))
# 方案二:内置命令简单翻转
fixed_angle_rot = cv2.rotate(src, cv2.ROTATE_90_CLOCKWISE)
# 创建画布布局子图区域
fig, axes = plt.subplots(nrows=1, ncols=3, figsize=(15, 5))
axes[0].imshow(cv2.cvtColor(src, cv2.COLOR_BGR2RGB)), axes[0].set_title("Source")
axes[1].imshow(cv2.cvtColor(free_rot_result, cv2.COLOR_BGR2RGB)), axes[1].set_title("Free Rotate")
axes[2].imshow(cv2.cvtColor(fixed_angle_rot, cv2.COLOR_BGR2RGB)), axes[2].set_title("Fixed-Angle Rotate")
plt.tight_layout(), plt.show()
```
以上脚本不仅实现了两种主要类型的旋转逻辑,还提供了直观的数据呈现形式以便分析比较。
---
#### 关键注意事项
- **坐标系约定**:按照 OpenCV 默认设定,左上角被当作整个画面系统的起点位置;因此当设置正值的角度值时实际表现为沿逆时针方向转动[^5]。
- **边界填充模式**:默认情况下超出新范围的部分会被裁剪掉或者留白填补,默认行为可通过额外参数进一步定制[^3]。
阅读全文
相关推荐

















