我正在用OpenCV编写C++代码,试图在图像上检测棋盘(从.jpg文件加载)以扭曲图像的 Angular 。当findChessboardCorners()找到棋盘时,我其余的代码运行正常。但是有时函数无法检测到模式,这种现象似乎是随机的。

例如,有一个图像可以在其原始分辨率2560x1920上工作,但是如果我先使用GIMP将其缩小到800x600则不能。但是,另一幅图像似乎却相反:不是以原始分辨率工作,而是按比例缩小了工作。

这是我的代码中执行检测的部分:

Mat grayimg = imread(argv[1], CV_LOAD_IMAGE_GRAYSCALE);
if (img.data == NULL) {
    printf("Unable to read image");
    return 0;
}
bool patternfound = findChessboardCorners(grayimg, patternsize, corners,
        CALIB_CB_ADAPTIVE_THRESH + CALIB_CB_FAST_CHECK);
if (!patternfound) {
    printf("Chessboard not found");
    return 0;
}

opencv中是否存在某种导致此问题的错误?有没有人对如何预处理图像有任何提示,因此该功能将更一致地工作?

我已经尝试过使用参数CALIB_CB_ADAPTIVE_THRESH,CALIB_CB_NORMALIZE_IMAGE,CALIB_CB_FILTER_QUADS和CALIB_CB_FAST_CHECK。当我传递彩色图像时,我也得到相同的结果。

提前致谢

编辑:我正在使用OpenCV版本2.4.1

最佳答案

我很难找到findChessboardCorners来工作,直到我在棋盘周围添加了一个白色的寄宿生。

我发现这是最近文档中的某个提示。

在添加边框之前,有时可能无法识别键盘,但是带有白色边框的键盘每次都可以使用。

10-07 13:37