python 图片 旋转
时间: 2025-01-14 19:38:36 浏览: 55
### 实现图片旋转
#### 使用PIL库进行图像旋转
通过`PIL.Image`模块中的`rotate()`方法能够轻松实现图像的旋转变换。此函数接受角度作为输入参数,正数代表逆时针方向旋转。
```python
from PIL import Image
def rotate_image_pil(image_path, angle):
with Image.open(image_path) as img:
rotated_img = img.rotate(angle, expand=True)
return rotated_img
```
该代码片段定义了一个名为`rotate_image_pil`的函数,用于接收图像路径和旋转角度两个参数,并返回经过旋转后的图像对象[^3]。
为了展示旋转效果并保存结果:
```python
rotated_image = rotate_image_pil('example.jpg', 45)
rotated_image.show()
rotated_image.save('rotated_example.png')
```
这段脚本调用了之前定义好的函数,传入具体的角度值(这里设为45度),接着利用`.show()`命令预览旋转后的图像,并最终将其另存为PNG格式文件。
#### 使用OpenCV库进行图像旋转
对于OpenCV而言,则需借助于仿射变换矩阵来完成这一操作。下面是一个完整的例子,不仅实现了图像本身的旋转,还考虑到了边界填充等问题。
```python
import cv2
import numpy as np
def rotate_image_opencv(image_path, angle):
image = cv2.imread(image_path)
(h, w) = image.shape[:2]
center = (w // 2, h // 2)
M = cv2.getRotationMatrix2D(center, angle, scale=1.0)
cos = np.abs(M[0, 0])
sin = np.abs(M[0, 1])
new_w = int((h * sin) + (w * cos))
new_h = int((h * cos) + (w * sin))
M[0, 2] += (new_w / 2) - center[0]
M[1, 2] += (new_h / 2) - center[1]
rotated = cv2.warpAffine(
image,
M,
(new_w, new_h),
borderMode=cv2.BORDER_CONSTANT,
borderValue=(255, 255, 255)
)
return rotated
```
上述代码首先计算出原始图像的高度宽度及其中心位置,之后构建了围绕着这个中心点按指定角度旋转所需的转换矩阵M。考虑到旋转过程中可能出现的部分区域被裁剪掉的情况,程序动态调整了输出画布大小以适应新的尺寸需求。最后一步则是应用`cv2.warpAffine()`来进行实际的空间映射工作[^5]。
同样地,如果想要查看或存储处理过的图像,只需简单添加几行额外的语句即可:
```python
rotated_image_cv = rotate_image_opencv('example.jpg', 45)
cv2.imshow("Rotated", rotated_image_cv)
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.imwrite('rotated_example_cv.png', rotated_image_cv)
```
这组指令先是在屏幕上弹出了一个小窗显示已旋转的图像,等待按键事件触发关闭窗口的动作;随后又把修改过的内容写回到磁盘上形成一个新的JPEG文件[^1]。
阅读全文
相关推荐


















