Я работаю над приложением, которому сначала нужно немного повернуть изображение, чтобы исправить его.
Я обнаружил вертикальную линию вниз по изображению между двумя точками (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 градусам и т. д., хотя они должны составлять всего несколько градусов в каждую сторону.
Если кто-нибудь может помочь мне найти решение этой проблемы, чтобы я мог правильно исправить перекос изображения, это было бы очень признательно.