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.