Saltar al contenido

Cómo deshacer una transformación de perspectiva para un solo punto en opencv

Solución:

Para invertir una homografía (por ejemplo, transformación de perspectiva), normalmente solo invierte la matriz de transformación.

Entonces, para transformar algunos puntos de su imagen de destino a su imagen de origen, invierte la matriz de transformación y transforma esos puntos con el resultado. Para transformar un punto con una matriz de transformación, lo multiplica de la derecha a la matriz, tal vez seguido de una deshomogeneización.

Afortunadamente, OpenCV proporciona no solo los métodos warpAffine / warpPerspective, que transforman cada píxel de una imagen en la otra imagen, sino que también existe un método para transformar puntos individuales.

Usar cv::perspectiveTransform(inputVector, emptyOutputVector, yourTransformation) método para transformar un conjunto de puntos, donde

inputVector es un std::vector<cv::Point2f> (también puede usar una matriz nx2 o 2xn, pero a veces eso es erróneo). En su lugar, puede usar el tipo cv :: Point3f, pero no estoy seguro de si serían puntos de coordenadas homogéneos o puntos 3D para transformación 3D (¿o quizás ambos?).

outputVector es un vacio std::vector<cv::Point2f> donde se almacenará el resultado

yourTransformation es un cv :: Mat 3×3 de doble precisión (como lo proporciona findHomography ) matriz de transformación (o 4×4 para puntos 3D).

Aquí hay un ejemplo de Python:

import cv2
import numpy as np

# Forward transform
point_transformed = cv2.perspectiveTransform(point_original, trans)

# Reverse transform
inv_trans = np.linalg.pinv(trans)
round_tripped = cv2.perspectiveTransform(point_transformed, inv_trans)

# Now, round_tripped should be approximately equal to point_original
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *