python实现图像旋转
时间: 2023-12-02 13:37:07 浏览: 76
要使用Python实现图像旋转,可以调用OpenCV库。下面是一种实现图像旋转的方法:
```python
import cv2
# 读取图像
image = cv2.imread("image.jpg")
# 获取图像的高度和宽度
height, width = image.shape[:2]
# 定义旋转角度
angle = 45
# 计算旋转中心
center = (width // 2, height // 2)
# 定义旋转矩阵
matrix = cv2.getRotationMatrix2D(center, angle, 1.0)
# 执行旋转操作
rotated_image = cv2.warpAffine(image, matrix, (width, height))
# 显示旋转后的图像
cv2.imshow("Rotated Image", rotated_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
相关问题
用python实现图像旋转使用最近邻插值
图像旋转是数字图像处理中常见的操作之一。在Python中,我们可以使用Pillow这个图像处理库来实现对图像的旋转。下面是使用Python实现图像旋转使用最近邻插值的步骤:
1. 导入Pillow库
在Python中,我们可以使用Pillow这个库来处理图像。我们需要先导入这个库:
from PIL import Image
2. 打开原始图像
在使用Python处理图像之前,我们需要先打开原始图像。我们可以使用Image.open()函数来打开原始图像:
img = Image.open('image.jpg')
其中,'image.jpg'为图像的文件名。
3. 创建一个新的图像
我们可以使用Image.new()函数来创建一个新的图像:
new_img = Image.new('RGB', (width, height))
其中,'RGB'表示图像类型为RGB格式,(width, height)表示图像的宽度和高度。
4. 对图像进行旋转
我们可以使用Image.rotate()函数来对图像进行旋转,其中,第一个参数为旋转的角度,第二个参数为旋转方式,最后一个参数为插值算法。这里我们使用最近邻插值算法:
rotated_img = img.rotate(angle, resample=Image.NEAREST)
其中,angle表示旋转的角度,resample表示插值算法,Image.NEAREST表示最近邻插值算法。
5. 保存旋转后的图像
最后,我们需要将旋转后的图像保存成新文件:
rotated_img.save('rotated_image.jpg')
其中,'rotated_image.jpg'为保存后的文件名。
通过以上步骤,我们就可以使用Python实现图像旋转使用最近邻插值。
python 实现代码旋转图像
以下是 Python 实现代码旋转图像的示例:
```python
import numpy as np
from PIL import Image
# 读取图片
img = Image.open('test.jpg')
# 转为 numpy 数组
img_arr = np.array(img)
# 图片旋转角度
angle = 45
# 计算旋转后的图片大小
rad = np.deg2rad(angle)
cos_theta, sin_theta = abs(np.cos(rad)), abs(np.sin(rad))
new_w = int(img_arr.shape[0] * cos_theta + img_arr.shape[1] * sin_theta)
new_h = int(img_arr.shape[1] * cos_theta + img_arr.shape[0] * sin_theta)
# 创建旋转后的空白图片
rotated_img = np.zeros((new_h, new_w, 3), dtype=np.uint8)
# 计算旋转中心点和偏移量
pivot_x, pivot_y = img_arr.shape[0] // 2, img_arr.shape[1] // 2
dx, dy = new_w // 2 - pivot_x, new_h // 2 - pivot_y
# 旋转图片
for i in range(new_h):
for j in range(new_w):
x, y = int(cos_theta * (j - dx) + sin_theta * (i - dy)), int(-sin_theta * (j - dx) + cos_theta * (i - dy))
if 0 <= x < img_arr.shape[1] and 0 <= y < img_arr.shape[0]:
rotated_img[i, j] = img_arr[y, x]
# 显示旋转后的图片
Image.fromarray(rotated_img).show()
# 保存旋转后的图片
Image.fromarray(rotated_img).save('rotated.jpg')
```
在这个示例中,我们使用了 numpy 和 PIL 库来读取和处理图片。我们首先将图片转换为 numpy 数组,然后计算旋转后的图片大小和旋转中心点和偏移量,最后使用两个 for 循环来旋转图片。旋转后的图片保存在一个新的 numpy 数组中并显示和保存。
阅读全文