I am trying to do a basic affine transformation using pivot points.
import cv2 import numpy as np import PIL import matplotlib.pyplot as plt img = cv2.imread('earth.png') img_pivots = cv2.imread('earth_keys.png') map_img = cv2.imread('earth2.png') map_pivots = cv2.imread('earth2_keys.png') pts_img_R = np.transpose(np.where(img_pivots[:, :, 2] > 0 )) pts_img_G = np.transpose(np.where(img_pivots[:, :, 1] > 0 )) pts_img_B = np.transpose(np.where(img_pivots[:, :, 0] > 0 )) pts_img = np.vstack([pts_img_R, pts_img_G, pts_img_B]) pts_map_R = np.transpose(np.where(map_pivots[:, :, 2] > 0 )) pts_map_G = np.transpose(np.where(map_pivots[:, :, 1] > 0 )) pts_map_B = np.transpose(np.where(map_pivots[:, :, 0] > 0 )) pts_map = np.vstack([pts_map_R, pts_map_G, pts_map_B]) M = cv2.estimateRigidTransform(pts_map.astype(np.float32), pts_img.astype(np.float32), True) dst = cv2.warpAffine(map_img,M,(img.shape[1], img.shape[0])) plt.subplot(121),plt.imshow(img),plt.title('earth.png') plt.subplot(122),plt.imshow(dst),plt.title('earth2.png transrofmed') plt.show()
On both images I made 3 dots (R, G and B) and saved them in separate images ("earth_keys.png" for "earth.png" and "earth2_keys.png" for "earth2.png"). All I want is to align the pivot points on "earth2.png" with the anchor points on "earth.png".
However, all I get after the conversion is 
I suppose I missed some arguments or something like this, but I tried all the combinations and got all kinds of wrong results, but still can't determine it.
Image Examples (with summaries)
Edit: Changed speed to 6
Still wrong conversion 
M is now equal
array([[ 4.33809524e+00, 8.28571429e-01, -5.85633333e+02], [ -6.22380952e+00, -1.69285714e+00, 1.03468333e+03]])
Example with 6 anchor points