opencv python图像旋转 不裁切
时间: 2023-07-24 14:20:29 浏览: 140
可以使用OpenCV的函数`warpAffine()`来实现图像旋转,该函数可以将图像按照指定的旋转角度和旋转中心进行旋转,并且可以选择是否裁切图像。
以下是一个示例代码,可以实现图像旋转但不裁切:
```python
import cv2
import numpy as np
# 读取图像
img = cv2.imread('image.jpg')
# 图像中心点坐标
h, w = img.shape[:2]
center = (w // 2, h // 2)
# 旋转角度
angle = 30
# 计算旋转矩阵
M = cv2.getRotationMatrix2D(center, angle, 1)
# 计算旋转后图像的大小
new_w, new_h = w, h
if angle == 90 or angle == 270:
new_w, new_h = h, w
else:
new_w = int(h * np.abs(np.sin(np.radians(angle))) + w * np.abs(np.cos(np.radians(angle))))
new_h = int(h * np.abs(np.cos(np.radians(angle))) + w * np.abs(np.sin(np.radians(angle))))
# 平移旋转后图像,不裁切
M[0, 2] += (new_w - w) // 2
M[1, 2] += (new_h - h) // 2
rotated = cv2.warpAffine(img, M, (new_w, new_h), borderValue=(255, 255, 255))
# 显示原图和旋转后的图像
cv2.imshow('original', img)
cv2.imshow('rotated', rotated)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在上面的代码中,`warpAffine()`函数的最后一个参数`borderValue`用于设置边界填充的像素值,这里设置为白色。如果不设置该参数,则默认使用黑色填充边界。
阅读全文