1
我正在使用Visual Studio 2010與OpenCV 3.0。我想校準一臺攝像機,而且我基本上在去年的帖子this中描述了相同的問題,但沒有回覆。我打電話給calibrateCamera,並且在cv :: collectCalibrationData中收到錯誤「Assertion failed(ni == ni1)」。OpenCV calibrateCamera聲明失敗(ni == ni1)
的是得到這個錯誤代碼行是:
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似乎會改變它們的大小。對此有何想法?
在此先感謝。