Problème avec cv::calibrateCamera
Bonjour,
J'essaie de trouver les paramètres de ma camera en fonction de points 3D et de leur projection 2D. La fonction calibrateCamera semble être adaptée, mais tout ce que j'arrive a avoir, c'est une belle boucle infinie. La documentation ne précise evidemment absolument rien et mes recherches sur google n'ont rien donné.
Explications du code:
J'ai un tableau de points 3D qui contient les coordonnées réelles des points (fixes) et un tableau de points 2D qui correspond a leur projection à l'écran (pour débugger, j'ai fixé les valeurs pour correspondre aux 4 coins de l'écran).
Ensuite, j'ai les listes de prises de vues qui ne contiennent en fait qu'une vue (correspondant aux tableaux de points).
Et ca coince a la fonction calibrateCamera sans que je sache vraiment pourquoi...
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
std::vector<cv::Point3f> points3Dcoords(4);
points3Dcoords[0] = ( cv::Point3f(0,1,0) );
points3Dcoords[1] = ( cv::Point3f(0,0,0) );
points3Dcoords[2] = ( cv::Point3f(1,0,0) );
points3Dcoords[3] = ( cv::Point3f(1,1,0) );
std::vector<cv::Point2f> points2Dcoords(4);
points2Dcoords[0] = ( cv::Point2f(0,height) );
points2Dcoords[1] = ( cv::Point2f(0,0) );
points2Dcoords[2] = ( cv::Point2f(width,0) );
points2Dcoords[3] = ( cv::Point2f(width,height) );
// listes de prises de vues (une seule)
std::vector< std::vector<cv::Point3f> > views3D;
views3D.push_back(points3Dcoords);
std::vector< std::vector<cv::Point2f> > views2D;
views2D.push_back(points2Dcoords);
// resultats
cv::Mat projectionMatrix, distortionMatrix;
std::vector<cv::Mat> rotations;
std::vector<cv::Mat> translations;
double d = cv::calibrateCamera(views3D, views2D, cv::Size(width, height), projectionMatrix, distortionMatrix, rotations, translations); |
Est-ce que le problème pourrait venir du fait que je n'ai que peu de points ? Ou alors qu'une seule prise de vue ?
Merci d'avance.