Это базовая c математика с углами в треугольнике.
если у вас есть две точки (x1,y1)
, (x2, y2)
, тогда вы можете вычислить dx = x2-x1
, dy = y2-y1
, а затем вы можете вычислить tangens_alpha = dy/dx
и alpha = arcus_tangens(tangens_alpha)
, и у вас есть angle
, который вы хотите использовать для расчета вращения - 90-alpha
In Python будет как ниже. Я взял очки с вашего изображения.
Поскольку изображение имеет (0,0)
в верхнем левом углу, а не в левом нижнем углу, как в math
, поэтому я использую dy = -(y2 - y1)
, чтобы перевернуть его
import math
x1 = 295
y1 = 605
x2 = 330
y2 = 100
dx = x2 - x1
dy = -(y2 - y1)
alpha = math.degrees(math.atan2(dy, dx))
rotation = 90-alpha
print(alpha, rotation)
И теперь вы можете использовать PIL
/ pillow
или cv2
+ imutils
, чтобы повернуть его
import math
import cv2
import imutils
x1 = 295
y1 = 605
x2 = 330
y2 = 100
dx = x2 - x1
dy = -(y2 - y1)
alpha = math.degrees(math.atan2(dy, dx))
rotation = 90-alpha
print(alpha, rotation)
img = cv2.imread('image.jpg')
img_2 = imutils.rotate(img, rotation)
cv2.imwrite('rotate.jpg', img_2)
img_3 = imutils.rotate_bound(img, -rotation)
cv2.imwrite('rotate_bound.jpg', img_3)
cv2.imshow('rotate', img_2)
cv2.imshow('rotate_bound', img_3)
cv2.waitKey(0)
rotate.jpg
rotate_bound.jpg