Я пытаюсь получить позиции новых точек P1_r(x1_new, y1_new)
и P2_r(x2_new, y2_new)
после поворота изображения с помощью imutils.rotate_bound()
. Исходное изображение содержит линию, определяемую точками P1(x1, y2)
и P2(x2, y2)
.
import imutils
import numpy as np
P1 = np.array([x1, y1])
P2 = np.array([x2, y2])
Начальная позиция следующая ( зеленая область представляет изображение ):
Перед вращением я должен вычислить angle
между линией, определяемой точками P1(x1, y2)
, P2(x2, y2)
и y-axis
( в данном случае Ось Y представлена зеленой линией ):
Затем необходимо вычислить angle
, где используется функция np.arccos()
:
if (P2[1] - P1[1]) < 0:
y_axis_vector = np.array([0, -1])
else:
y_axis_vector = np.array([0, 1])
if (P2[0] - P1[0]) < 0 and (P2[1] - P1[1]) :
y_axis_vector = np.array([0, 1])
p_unit_vector = (P2 - P1) / np.linalg.norm(P2-P1)
angle = np.arccos(np.dot(p_unit_vector, y_axis_vector)) * 180 / math.pi
Затем можно повернуть изображение:
rotated_image = imutils.rotate_bound(original_image, -angle)
Таким образом, результат должен выглядеть следующим образом:
Сейчас я пытаюсь вычислить позиции новых точек P1_r(x1_new, y1_new)
и P2_r(x2_new, y2_new)
. Я пытался использовать «стандартные» функции sin()
и cos()
для вычисления новых x
и y
позиций для точки P1_r
:
x1_new = y1 * sin(angle) + x1 * cos(angle)
y1_new = y1 * cos(angle) - x1 * sin(angle)
и для точки P2_r
:
x2_new = y2 * sin(angle) + x2 * cos(angle)
y2_new = y2 * cos(angle) - x2 * sin(angle)
Однако это doesn't work
, потому что вращается вся картинка, а не только линия.
Как мне решить эту проблему?