повернуть изображение на основе двух координат - PullRequest
0 голосов
/ 12 февраля 2020

У меня есть много изображений, которые содержат две точки, одну сверху и другую снизу. Как и у меня, координаты хранятся в файле Excel тоже. Я хочу повернуть изображение так, чтобы оно было на 90 градусов. Ниже изображение, которое содержит две координаты. enter image description here

Красный цвет обозначает фактическое изображение с использованием координат, а угол составляет 85 градусов (приблизительно), поэтому я хочу повернуть изображение и сделать его на 90 градусов, как показано желтым на рисунке.

Может ли кто-нибудь помочь мне с этим, какие API или функции использовать. (Я использую Python для кодирования) enter image description here

1 Ответ

2 голосов
/ 12 февраля 2020

Это базовая c математика с углами в треугольнике.

если у вас есть две точки (x1,y1), (x2, y2), тогда вы можете вычислить dx = x2-x1, dy = y2-y1, а затем вы можете вычислить tangens_alpha = dy/dx и alpha = arcus_tangens(tangens_alpha), и у вас есть angle, который вы хотите использовать для расчета вращения - 90-alpha

enter image description here


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

enter image description here

rotate_bound.jpg

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...