У меня есть список из четырех точек повернутого прямоугольника в виде:
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')
@Yetiowner Да, я думаю, это правильно. Я знал размеры пурпурного прямоугольника, потому что создал его и повернул, но предположил, что вы можете рассчитать длину точно так же, как и вы. Топовая работа?
Большое спасибо! Я предполагаю, что (200, 100) - это длина, ширина и высота выходного изображения. Я предполагаю, что эти значения могут быть рассчитаны как x = ((transform[2]-transform[0])**2+(transform[3]-transform[1])**2)**0,5 и y = ((преобразование[6]-преобразование[4])**2+(преобразование[7]-преобразование[5])**2)**0,5