Python如何把图像旋转

Python如何把图像旋转

作者:Joshua Lee发布时间:2026-01-06阅读时长:0 分钟阅读次数:20

用户关注问题

Q
如何用Python调整图像的旋转角度?

我想用Python代码来旋转图像,但不清楚怎么指定旋转的角度,该如何实现?

A

使用PIL库调整图像旋转角度

可以使用Pillow(PIL的升级版)库中的Image模块,通过rotate()方法来旋转图像。rotate函数接受角度参数,单位是度,正值表示逆时针旋转。例如:

from PIL import Image

img = Image.open('example.jpg')
rotated_img = img.rotate(45)  # 旋转45度
rotated_img.save('rotated_example.jpg')

这样即可将图像旋转指定角度,并保存旋转后的图像。

Q
有没有Python库可以方便地对图像进行旋转处理?

除了PIL,还有其他库支持图像旋转操作吗?它们的使用方法是什么?

A

OpenCV库进行图像旋转的方法

OpenCV是功能强大的计算机视觉库,也支持图像旋转。可以通过cv2.getRotationMatrix2D函数创建旋转矩阵,再用cv2.warpAffine函数应用旋转变换。

示例代码:

import cv2
import numpy as np

img = cv2.imread('example.jpg')
(h, w) = img.shape[:2]
center = (w // 2, h // 2)

M = cv2.getRotationMatrix2D(center, 45, 1.0)  # 旋转45度,比例因子1.0
rotated_img = cv2.warpAffine(img, M, (w, h))
cv2.imwrite('rotated_example.jpg', rotated_img)

这样就完成了图像的旋转。

Q
如何确保旋转后的图像不被裁剪?

我用Python旋转图像时发现,旋转后图像的部分内容会被切掉,怎么避免这种情况?

A

扩大画布以防止旋转图像被裁剪

默认旋转图像时,画布大小不变,导致旋转后内容超出边界被裁剪。可以先计算旋转后的图像尺寸,在调整画布大小后再旋转。

使用PIL时,可以将expand参数设置为True:

from PIL import Image

img = Image.open('example.jpg')
rotated_img = img.rotate(45, expand=True)  # 自动扩大画布
rotated_img.save('rotated_expanded.jpg')

OpenCV中需要手动计算新的边界尺寸后,调整warpAffine函数的输出大小以包含全部旋转内容。