私はOpenCV 3.0でVisualStudio 2010を使用しています。私はカメラを較正したいと思っていますが、私は昨年の投稿と同じ問題を基本的にはthisに記載していますが、それには答えられませんでした。私はcalibrateCameraを呼び出していますが、 "アサーションが失敗しました(ni == ni1)cv :: collectCalibrationData"です。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に変換するのがなぜ彼らのサイズを変えているようです。これについての考えは?
ありがとうございます。