相机校准 - 无法检测棋盘

camera calibration - unable to detect chessboard

我正在使用openCV的功能检测棋盘,但没有检测到棋盘。

我使用的图片:

const Size chessboardDimensions = Size(4,8);
int main (int argv, char ** argc)
{
        frame = imread("/home/Georges/Desktop/a.jpg");
        cvtColor(frame, frame, CV_BGR2GRAY);
        int found = findChessboardCorners(frame, chessboardDimensions, foundPoints, CV_CALIB_CB_ADAPTIVE_THRESH | CV_CALIB_CB_NORMALIZE_IMAGE);

}

found 总是等于 0。有人能解释一下为什么吗?

const Size chessboardDimensions = Size(4,8);

在这个表达式中大小应该是

Size(5,8)

因为你应该计算内部方块的角。

编辑:

如评论中所述,int found 应为 bool。因为函数 returns if corners 是否找到。

并且作为建议,为您的函数添加快速检查选项,否则该函数可能会运行缓慢:

bool found = findChessboardCorners(frame, chessboardDimensions, foundPoints, CV_CALIB_CB_ADAPTIVE_THRESH | CV_CALIB_CB_NORMALIZE_IMAGE | CALIB_CB_FAST_CHECK);

最好检查是否所有点都找到正确。在某些情况下,无法检测到所有点,在进一步的应用中,这种情况会产生错误。因为这个函数的输出将是另一个函数的输入。所以在循环中添加一个 continue 表达式:

if(found == 0 || foundPoints.size() != chessboardDimensions.area())
    continue;