2016-03-22 5 views
1

J'utilise VisualStudio 2010 avec OpenCV 3.0. Je veux calibrer un appareil photo et j'ai essentiellement le même problème décrit dans this post de l'année dernière, mais il n'a pas été répondu. J'appelle calibrateCamera et j'obtiens l'erreur "Échec de l'assertion (ni == ni1) dans cv :: collectCalibrationData".Échec de l'assertion CalibrationCamera OpenCV (ni == ni1)

La ligne de code qui obtient cette erreur est:

double rms = calibrateCamera(objectPoints, imagePoints, imageSize, cameraMatrix, distCoeffs, rvecs, tvecs, s.flag | CALIB_FIX_K4 | CALIB_FIX_K5); 

J'ai vérifié la taille des deux objectPoints et imagePoints, et ils sont les mêmes. Il semble être une erreur dans la conversion de vecteur à InputArrayOfArrays. J'ai écrit le code suivant pour le découvrir:

cv::InputArrayOfArrays IMGPOINT = imagePoints; std::cout << (int) IMGPOINT.total() << std::endl; 
cv::InputArrayOfArrays OBJPOINT = objectPoints; std::cout << (int) OBJPOINT.total() << std::endl; 

for(int i = 0; i < 3; ++i){ 
    std::cout << OBJPOINT.getMat(i).checkVector(3, CV_32F) << std::endl; 
    std::cout << IMGPOINT.getMat(i).checkVector(2, CV_32F) << std::endl; 
} 

Et imprimé:

5 
5 
48 
48 
174912 
16 
788167652 
111826623 

Quand je tendance à penser qu'il devrait imprimer les suivants:

5 
5 
48 
48 
48 
48 
48 
48 

Comme J'ai décrit, il apparaît un entier aléatoire chaque fois que j'exécute le programme - ils ne sont pas cohérents et ne sont jamais égaux les uns aux autres. Je ne suis pas sûr pourquoi collectCalibrationData obtient les mauvaises valeurs pour la taille de mes vecteurs, et pourquoi la conversion des vecteurs en InputArrayofArrays semble changer leur taille. Des pensées à ce sujet?

Merci d'avance.

Répondre

0

J'ai résolu ce problème après avoir reconstruit les bibliothèques avec Cmake. J'ai utilisé OpenCV 3.0.