Я работаю над приложением, которое сначала необходимо слегка повернуть изображение, чтобы его можно было скопировать.Расчет угла Python для поворота изображения
Я обнаружил вертикальную линию изображения между двумя точками (x1, y1) и (x2, y2). Вертикальная линия не полностью вертикальная - вторая координата x немного меньше или немного больше, чем верхняя x, и поэтому линия имеет наклон.
Я пытаюсь вычислить угол наклона линии, чтобы я мог поворачивать изображение, а затем снова обнаруживать линию так, чтобы она была абсолютно вертикальной. Для этого я использую OpenCV в Python.
К сожалению, у меня проблемы с вычислением наклона линии, поэтому вращение изображения является неточным.
Моя функция для определения наклона вертикальной линии на изображении выглядит следующим образом:
def find_vert_angles(vertical_line_candidates, vertical_line_candidates2, roi_x_coordinates, roi_x_coordinates2):
line_angles_radians = []
for line_x, line_x2 in itertools.izip(vertical_line_candidates, vertical_line_candidates2):
x_diff = line_x2 - line_x
y_diff = roi_x_coordinates[1][1] - roi_x_coordinates[0][1]
if x_diff != 0:
slope = y_diff/x_diff
angle_in_radians = atan(slope)
line_angles_radians.append(angle_in_radians)
else:
line_angles_radians.append(0)
return line_angles_radians
Мой код, чтобы повернуть изображение так, чтобы линия может быть вертикальной выглядит следующим образом:
skew_angle = degrees(vert_angle[1])
print "Detected skew angle is " + str(skew_angle) + " degrees"
warp = cv2.getRotationMatrix2D((img_width/2,img_height/2),skew_angle,1)
image = cv2.warpAffine(image,warp,(img_width,img_height))
Но углы поворота выходят как 249 градусов, 89 градусов и т. Д., Когда они должны быть всего лишь на несколько градусов в каждом направлении.
Если кто-нибудь может помочь мне найти решение этой проблемы, чтобы я мог правильно исправить перекос изображения, это было бы высоко оценено.