Как получить угол поворота от findHomography? - PullRequest
0 голосов
/ 24 октября 2019

Я хочу повернуть изображение, не прибегая к cv2.warpPerspective(). Как получить угол на выходе функции cv2.findHomography()?

Это не помогло

# Find homography
H, mask = cv2.findHomography(points1, points2, cv2.RANSAC)

# for example my H:
array([[ 1.20001976e-01,  5.19205433e-04, -1.21739638e+01],
       [ 1.51272694e-03,  1.18686196e-01, -1.59772594e+01],
       [ 1.98308723e-06, -1.18197608e-07,  1.00000000e+00]])

# What should be the someFunction function?
angle = someFunction(H) # from 0 to 360

rotated = imutils.rotate(image, angle=angle)

1 Ответ

0 голосов
/ 24 октября 2019

Если преобразование между двумя наборами точек представляет собой шкалу + вращение + сдвиг, то гомография будет просто аффинной матрицей, в которой верхний левый блок 2x2 представляет собой масштабированное вращение. В этом случае вычислите угол, используя:

angle = math.atan2(H[1,0], H[0,0])

Если может проникнуть какой-то другой вид преобразования (сдвиг, проективный), то безопаснее сначала выполнить декомпозицию SVD верхнего левого блока 2x2, чтобывосстановить вращение:

u, _, vh = numpy.linalg.svd(H[0:2, 0:2])
R = u @ vh
angle = math.atan2(R[1,0], R[0,0])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...