このコードで魚眼レンズを調整したいと思います。
bool found = findChessboardCorners( view, s.boardSize, pointBuf, CALIB_CB_ADAPTIVE_THRESH | CALIB_CB_FAST_CHECK | CALIB_CB_NORMALIZE_IMAGE);
vector<vector<Point2f> > imagePoints;
imagePoints.push_back(pointBuf);
Mat cameraMatrix, distCoeffs;
vector<Mat> rvecs, tvecs;
vector<float> reprojErrs;
vector<vector<Point3f> > objectPoints(1);
s.flag = fisheye::CALIB_RECOMPUTE_EXTRINSIC|fisheye::CALIB_FIX_SKEW|fisheye::CALIB_FIX_K1;
calcBoardCornerPositions(s.boardSize, s.squareSize, objectPoints[0], s.calibrationPattern);
double rms = fisheye::calibrate(objectPoints, imagePoints, view.size(), cameraMatrix, distCoeffs, rvecs, tvecs, s.flag);
チェス盤を見つけるのに問題はありませんが、キャリブレーション中にアサート エラーが発生します。
アサーションが失敗しました ((flags & FIXED_TYPE) != 0) cv::_InputArray::type、ファイル ......\sources\modules\core\src\matrix.cpp、1792 行目
だから私はrvecs
このように初期化しようとしました:
for(int i = 0 ; i < imagePoints.size() ; ++i)
{
rvecs.push_back(Mat::zeros(3, 3, CV_64FC3));
}
しかし、これで私は別のアサートを取得します:
OpenCV エラー: cv::_InputArray::getMat、ファイル ......\sources\modules\core\src\matrix.cpp でアサーションが失敗しました (0 <= i && i < (int)v.size()) 、1170行目
どのようrvecs
にtvecs
宣言し、初期化する必要がありますか?