我正在尝试在 Windows 7 + MinGW 环境中使用 OpenCV 2.4.2 检测用于相机校准的棋盘图案。
调用 findChessboard() 函数时出现断言失败。只有当棋盘出现在摄像机的视野中时,才会发生断言。
OpenCV 错误:setSize 中的断言失败 (s >= 0),文件 C:\opencv\modules\core\src\matrix.cpp,第 115 行
我也尝试了 sample\cpp\calibration.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)或断言(当检测到棋盘图案时)。