使用旋转矩形的 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')
我有一个旋转矩形的四个点的列表,形式为:
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')