1

Windows 7 + MinGW 環境で OpenCV 2.4.2 を使用して、カメラのキャリブレーションのためにチェス盤のパターンを検出しようとしています。

findChessboard() 関数を呼び出すと、アサーション エラーが発生します。アサーションは、チェス盤がカメラの視界に入ったときにのみ発生します。

OpenCV エラー: setSize、ファイル C:\opencv\modules\core\src\matrix.cpp、行 115 でアサーションが失敗しました (s >= 0)

sample\cpp\calibration.exe も試してみましたが、同じ結果が得られました。サンプル ソース コードは次の場所にあります。

http://code.opencv.org/projects/opencv/repository/revisions/c5aba337e995eef92704201be2e37773a63b3709/entry/samples/cpp/calibration.cpp

468 ~ 469 行を見てください。

found = findChessboardCorners( view, boardSize, pointbuf,
          CV_CALIB_CB_ADAPTIVE_THRESH | CV_CALIB_CB_FAST_CHECK | CV_CALIB_CB_NORMALIZE_IMAGE);

私自身のコードは次のようになります。

cv::Size patternsize(5, 4), windowSize(11,11), zZone(0,0);
vector<Point2f> corners;

// Find corners
if (findChessboardCorners(gray, patternsize, corners,
                          CALIB_CB_ADAPTIVE_THRESH
                          + CALIB_CB_NORMALIZE_IMAGE
                          + CALIB_CB_FAST_CHECK)) {

    cout << "pattern detected!";

    cornerSubPix(gray, corners, windowSize, zZone,
      TermCriteria(CV_TERMCRIT_EPS + CV_TERMCRIT_ITER, 30, 0.1));

    // cv::drawChessboardCorners(gray, patternsize, Mat(corners), true);
}

前述のように、制御は cout ステートメントに到達することはありません。findChessboardCorners は何も検出しない (false を返す) か、アサートします (チェス盤のパターンが検出された場合)。

4

0 に答える 0