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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
r= cv2.perspectiveTransform(pts_nvx.reshape(1, -1, 2), h)