使用旋转矩形的 4 个点在 PIL 中裁剪图像

Crop an image in PIL using the 4 points of a rotated rectangle

我有一个旋转矩形的四个点的列表,形式为:

points = [[x1, y1], [x2, y2], [x3, y3], [x4, y4]]

我可以使用 PIL 裁剪:

img.crop((x1, y1, x2, y2))

但这不适用于旋转的矩形。澄清一下,我希望旋转生成的裁剪图像,使裁剪区域变成一个未旋转的矩形。

我愿意使用 openCV,尽管我想避免使用它,因为将图像从 PIL 转换为 openCV 需要时间,而且我将迭代这个过程大约 100 次。

如果您从这张图片开始:

你可以这样使用 QuadTransform:

#!/usr/bin/env python3

from PIL import Image, ImageTransform

# Open starting image and ensure RGB
im = Image.open('a.png').convert('RGB')

# Define 8-tuple with x,y coordinates of top-left, bottom-left, bottom-right and top-right corners and apply
transform=[31,146,88,226,252,112,195,31]
result = im.transform((200,100), ImageTransform.QuadTransform(transform))

# Save the result
result.save('result.png')