[OpenCV] Homographie plans 2D
Bonjour,
Je travaille sur un projet avec la bibliothèque OpenCV (il existe un forum OpenCV, mais en C++...). Ce projet consiste à adapter les coordonnées d'un repère 2D à un autre (2D également). Considérant :
- l'image de la caméra, repère Rc, avec des coordonnées de points en pixels;
- la scène en "vrai", repère Rv, avec des coordonnées de points en mètres.
J'ai une correspondance sur 4 points communs entre Rc et Rv. Je souhaite récupérer la matrice d'homographie pour, un pixel quelconque de Rc, avoir les coordonnées dans le repère Rv.
J'ai rédigé quelques lignes de codes, et j'ai une erreur (au moment de l'appel de la fonction perpectiveTransform). Les recherches sur internet me renvoient sur un problème de définition d'entier (float32), qu'il me semble avoir pris en compte, mais rien n'y fait.
Donc, probablement que je n'ai pas compris l'usage de la fonction (ou de l'algorithme... ou des deux). Pouvez-vous m'aider ?
Merci
Ci-dessous mon code :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| #!/usr/bin/env python
import cv2
import numpy as np
if __name__ == '__main__' :
# Coordonnées sources repère Rc
pts_src = np.array([[89, 346], [297, 253], [372, 325],[463, 400]], dtype = "float32")
# Coordonnées destinatrice repère Rv (correspondance avec Rc)
pts_dst = np.array([[-4.11, 10.1],[0, 15.7],[0, 10.1],[0, 7.5]], dtype = "float32")
# Calcule Homographie
h, status = cv2.findHomography(pts_src, pts_dst)
# Calculer projection
pts_nvx = np.array([-4.11, 10.1,1], dtype = "float32")
r= cv2.perspectiveTransform(pts_nvx, h)
print(r)
cv2.waitKey(0) |
Edit :
il faut rédiger perspectiveTransform comme suit (ajout de reshape pour bien scpécifier qu'il s'agit d'un vecteur) :
Code:
r= cv2.perspectiveTransform(pts_nvx.reshape(1, -1, 2), h)