Я пытаюсь определить шаблон шахматной доски для калибровки камеры, используя OpenCV 2.4.2, в среде Windows 7 + MinGW.
Я получаю ошибку подтверждения при вызове функции findChessboard (). Утверждение происходит только тогда, когда шахматная доска появляется перед камерой.
Ошибка OpenCV: утверждение не выполнено (s> = 0) в файле setSize
C: \ opencv \ modules \ core \ src \ matrix.cpp, строка 115
Я также попробовал sample \ cpp \ calib.exe и получил там тот же результат. Пример исходного кода можно найти здесь:
Посмотрите на строку 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), либо утверждает (при обнаружении шахматной фигуры).
Задача ещё не решена.
Других решений пока нет …