OpenCV 校准相机断言失败 (ni == ni1)

OpenCV calibrateCamera Assertion failed (ni == ni1)

本文关键字:ni ni1 失败 相机 断言 OpenCV      更新时间:2023-10-16

我正在使用VisualStudio 2010和OpenCV 3.0。我想校准相机,我遇到了去年这篇文章中描述的基本相同的问题,但没有得到回应。我正在调用校准相机,我收到错误"断言失败(ni == ni1)在cv::collectCalibrationData"。

收到此错误的代码行是:

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

我已经检查了objectPoints和imagePoints的大小,它们是相同的。这似乎是将矢量转换为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 似乎会改变它们的大小。对此有什么想法吗?

提前谢谢。

我在使用 Cmake 重建库后解决了这个问题。我使用了OpenCV 3.0。