Ich möchte überprüfen, ob das nach der Affine-Konvertierung (cv2.warpAffine) ausgeschnittene Bild in das Originalbild passt. Die Koordinaten der vier Ecken des ausgeschnittenen Bildes sollten im Originalbild liegen
Bei der an warpAffine übergebenen Matrix handelt es sich um eine (2 × 3) -Matrix. Wenn Sie die Zeile [0, 0, 1] hinzufügen und ~~ transponieren, können Sie zuerst die verwendete Rotationsmatrix erhalten. Unter der Annahme, dass die Koordinaten nach der affinen Umwandlung (x, y) sind, multiplizieren Sie ~~ [x, y, 1] mit der inversen Matrix der Rotationsmatrix ~~ ]] Ich glaube, dass die ursprünglichen Koordinaten durch Multiplizieren mit (3 × 1) erhalten werden können. Ich denke, es gibt eine Methode, die OpenCV unterstützt, aber ~~ es ist mühsam zu finden ~~ Ich weiß nicht, welche ich verwenden soll oder wie ich sie verwenden soll.
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