相机校准 - 无法检测棋盘

时间:2017-09-15 09:14:48

标签: python c++ opencv camera-calibration

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

我正在使用的图片:

enter image description here

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);

}

发现总是等于0.有人可以解释一下为什么吗?

1 个答案:

答案 0 :(得分:4)

const Size chessboardDimensions = Size(4,8);

在此表达式中,大小应为

Size(5,8)

因为你应该计算内部正方形的角落。

编辑:

正如评论中所述,int found应为bool。因为如果找到角落,函数会返回。

并且随着建议为您的功能添加快速检查选项,否则该功能可能会工作滞后:

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;