我正在使用VisualStudio 2010和OpenCV 3.0。我想校准一台摄像机,我在去年的this帖子中描述的问题基本相同,但没有得到回应。我正在调用calibrateCamera,我在cv :: collectCalibrationData中收到错误“Assertion failed(ni == ni1)”。
获得此错误的代码行是:
double rms = calibrateCamera(objectPoints, imagePoints, imageSize, cameraMatrix, distCoeffs, rvecs, tvecs, s.flag | CALIB_FIX_K4 | CALIB_FIX_K5);
我检查了objectPoints和imagePoints的大小,它们是相同的。将vector转换为InputArrayOfArrays似乎是一个错误。我已经编写了下一个代码来找到它:
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;
}
打印出来:
5
5
48
48
174912
16
788167652
111826623
当我倾向于认为它应该打印下一个:
5
5
48
48
48
48
48
48
正如我所描述的,每次运行程序时它都会出现一个随机整数 - 它们不一致,并且永远不会相等。我不确定为什么collectCalibrationData为我的向量大小得到错误的值,为什么将向量转换为InputArrayofArrays似乎改变了它们的大小。有什么想法吗?
提前致谢。
答案 0 :(得分:0)
我在用Cmake重建libs后解决了这个问题。我使用的是OpenCV 3.0。