Sto tentando di eseguire la trasformazione affine di base utilizzando i punti pivot.La trasformazione affine OpenCV non verrà eseguita
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()
Su entrambe le immagini sono fatto 3 punti (R, G & B) e salvate in immagini separate ('earth_keys.png' per 'Earth.png' e 'earth2_keys.png' per 'earth2.png '). Tutto quello che voglio è far corrispondere i punti di pivot su "earth2.png" con i punti pivot su "earth.png".
Eppure, tutto quello che ottiene dopo la trasformazione è questo
Sto assumendo che ho smarrito alcuni argomenti o qualcosa di simile, ma ho provato tutte le combinazioni e ottenuto tutti i tipi di risultati sbagliati, ma ancora in grado di' Lo vedo.
Edit: perni modificate numero 6
M è ora uguale
array([[ 4.33809524e+00, 8.28571429e-01, -5.85633333e+02],
[ -6.22380952e+00, -1.69285714e+00, 1.03468333e+03]])
puoi provare a utilizzare più di 3 punti? ci sono forme rigide che consentono un minimo di 3 punti, ma openCV ha un parametro "fullAffine". Se questo è impostato, penso che ci siano più di 6 dof. Puoi dirci anche i valori di risultato di M? – Micka
appena controllato .. 6dof dovrebbe essere ok per fullAffine quindi 3 coppie di punti dovrebbero essere ok. per favore stampa e aggiungi M – Micka
Aggiunti altri 3 perni e modificato la domanda, ancora qualcosa non va. Stai usando lo stesso codice? – arkhy