python - 裁剪具有相同宽高比的旋转图像

标签 python image-processing rotation crop

当输入图像旋转给定度数然后裁剪以避免任何非图像区域同时保持原始图像纵横比时,如何找出最终图像的宽度和高度。

例子: example

最佳答案

enter image description here

  • 红色矩形是具有原始纵横比的原始图像。
  • W/t 矩形(由绿色和黄色三角形包围)已旋转 图片宽高比为 extend=True

这里是获取wh的方法。

image = Image.open(...)
rotated = image.rotate(degrees, Image.BICUBIC, True)

aspect_ratio = float(image.size[0]) / image.size[1]
rotated_aspect_ratio = float(rotated.size[0]) / rotated.size[1]
angle = math.fabs(degrees) * math.pi / 180

if aspect_ratio < 1:
    total_height = float(image.size[0]) / rotated_aspect_ratio
else:
    total_height = float(image.size[1])

h = total_height / (aspect_ratio * math.sin(angle) + math.cos(angle))
w = h * aspect_ratio

现在旋转后的图像可以在中心裁剪为 wxh 尺寸 得到最终图像。

关于python - 裁剪具有相同宽高比的旋转图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21346670/

相关文章:

python - 基于生成器的协程与原生协程

python - 使用 numpy 在网格中显示图像的更惯用方式

math - 以类似于 Photoshop 中的 L 组件的方式增加图像亮度的公式是什么?

python - 使用python选择图像的区域

javascript - 为所有主流浏览器创建 css3 无限旋转

python - 使用不同的扩展名轮换日志

ios - 当我更改 ViewController 时 UIImageView 不旋转

python - 如何查看 spacy NER softmax 值?

python - tkinter Python 中的按钮位置(网格)

python - 使用 LightGBM 进行多类分类