Ghilas BELHADJ
Ghilas BELHADJ

Reputation: 14124

Calculate new coordinates of keypoints after transformation

How to get the new coordinates of the points a and b in this exemple after a transformation M (40 degrees counter-clockwise rotation) ?

import cv2

cap = cv2.VideoCapture("http://i.imgur.com/7G91d2im.jpg")
a, b = (100, 100), (200, 200)

if cap.isOpened():
    ret, im = cap.read()
    rows, cols = im.shape[:2]

    im_keypoints = im.copy()
    for point in [a, b]:
        cv2.circle(im_keypoints, point, 6, (0, 0, 255), -1)
    cv2.imwrite("im_keypoints.jpg", im_keypoints)

    M = cv2.getRotationMatrix2D((cols / 2, rows / 2), 40, 1)
    im_rotated = cv2.warpAffine(im, M, (cols, rows))

    cv2.imwrite("im_rotated.jpg", im_rotated)

enter image description here enter image description here

Upvotes: 4

Views: 2453

Answers (1)

cxyzs7
cxyzs7

Reputation: 1227

M is a 2 by 3 rotation matrix, so all you need to do it apply M to your points.

im_rotated_keypoints = im_rotated.copy()
for point in [a, b]:
    # Convert to homogenous coordinates in np array format first so that you can pre-multiply M
    rotated_point = M.dot(np.array(point + (1,)))
    cv.circle(im_rotated_keypoints, (int(rotated_point[0]), int(rotated_point[1])), 6, (0, 0, 255), -1)

And you should be able to see

rotated

Upvotes: 5

Related Questions