Je veux vérifier si l'image découpée après la conversion affine (cv2.warpAffine) correspond à l'image d'origine. Les coordonnées des quatre coins de l'image découpée doivent être dans l'image d'origine
En regardant la matrice passée à warpAffine, c'est une matrice (2 × 3). Si vous ajoutez la ligne [0, 0, 1] à ceci et que vous la transposez ~~, vous pouvez obtenir la matrice de rotation utilisée en premier. En supposant que les coordonnées après conversion affine sont (x, y), multipliez ~~ [x, y, 1] par la matrice inverse de la matrice de rotation ~~ La matrice inverse de la matrice de rotation est [[x], [y], [1] ]] Je pense que les coordonnées originales peuvent être obtenues en multipliant par (3 × 1). Je pense qu'il existe une méthode qui prend en charge OpenCV, mais ~~ c'est un problème à trouver ~~ Je ne sais pas laquelle utiliser ou comment l'utiliser.
inverseWarpAffine.py
import cv2
import numpy as np
def getOriginalPosition(p, M):
origin = np.array([[p.x], [p.y], [1]])
rotateM = np.array([M[0], M[1], [0, 0, 1]])
invM = np.linalg.inv(rotateM.T)
return np.dot(invM, origin)[:2, 0]
Recommended Posts