2016-03-22 60 views
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似乎會改變它們的大小。對此有何想法?

在此先感謝。

回答

0

我用Cmake重建庫後解決了這個問題。我使用了OpenCV 3.0。

相關問題