python, Image 旋转之后有黑边
时间: 2023-10-20 15:15:50 浏览: 496
在旋转图片过程中,由于旋转后图片的宽高会发生变化,因此可能会出现黑边的情况。为了避免这种情况,可以使用以下两种方法:
1. 缩放后旋转:在旋转图片之前,先将图片进行缩放,使得缩放后的图片宽高可以完全容纳旋转后的图片,然后再进行旋转,这样旋转后就不会出现黑边了。
2. 填充空白:在旋转图片时,可以将旋转后空白处填充成白色或其他颜色,这样就不会出现黑边了。可以使用PIL库中的ImageOps.expand()方法来实现。例如:
```python
from PIL import Image, ImageOps
img = Image.open('test.jpg')
rotated_img = img.rotate(30, fillcolor='white')
new_img = ImageOps.expand(rotated_img, border=10, fill='white')
new_img.show()
```
其中,fillcolor参数指定了旋转后空白处填充的颜色,border参数指定了填充的边框大小,fill参数指定了填充的颜色。
相关问题
python旋转图片有黑边
在Python中旋转图片时可能会出现黑边的问题,这是由于旋转操作会导致图像边缘超出原始图像范围,而默认情况下,旋转后的图像的空白部分会被填充为黑色。
要解决这个问题,可以使用PIL库中的`rotate()`函数,并配合`expand=True`参数来扩展图像尺寸,以适应旋转后的图像。
以下是一个示例代码:
```python
from PIL import Image
def rotate_image(image_path, angle):
# 打开图像
image = Image.open(image_path)
# 旋转图像并扩展尺寸
rotated_image = image.rotate(angle, expand=True)
# 创建一个白色背景图像
bg_image = Image.new("RGB", rotated_image.size, (255, 255, 255))
# 将旋转后的图像粘贴到白色背景图像上
bg_image.paste(rotated_image, (0, 0), rotated_image)
return bg_image
# 示例调用
image_path = "/path/to/image.jpg"
angle = 45 # 旋转角度
rotated_image = rotate_image(image_path, angle)
rotated_image.show()
```
在上述示例中,我们首先打开指定路径的图像,然后使用`rotate()`函数旋转图像,并设置`expand=True`以扩展图像尺寸。接下来,我们创建一个白色背景图像,并使用`paste()`函数将旋转后的图像粘贴到白色背景上。最后,返回处理后的图像对象,并可以使用`show()`函数显示结果。
这样就可以避免旋转图片时出现黑边的问题。
python实现图片任意角度旋转且没有黑边的代码
以下是Python实现图片任意角度旋转且没有黑边的代码:
```python
import cv2
import numpy as np
def rotate_image(image, angle):
# 获取图像尺寸
height, width = image.shape[:2]
# 计算旋转后图像尺寸
new_width = int(width * np.abs(np.cos(angle)) + height * np.abs(np.sin(angle)))
new_height = int(height * np.abs(np.cos(angle)) + width * np.abs(np.sin(angle)))
# 构造旋转矩阵
matrix = cv2.getRotationMatrix2D((width / 2, height / 2), angle, 1)
# 计算平移量
tx = (new_width - width) / 2
ty = (new_height - height) / 2
matrix[0, 2] += tx
matrix[1, 2] += ty
# 执行旋转
rotated_image = cv2.warpAffine(image, matrix, (new_width, new_height), borderValue=(255, 255, 255))
return rotated_image
```
该函数接受两个参数:待旋转的图像和旋转角度。通过调用OpenCV的`getRotationMatrix2D()`函数来构造旋转矩阵,然后计算平移量,最后调用`warpAffine()`函数来执行旋转。在`warpAffine()`函数中,通过设置`borderValue`参数为白色(255, 255, 255)来避免旋转后出现黑边。
阅读全文