c++ - opencv 中 findChessboardCorners() 的结果不一致

标签 c++ image-processing opencv

我正在使用 OpenCV 编写 C++ 代码,其中我试图检测图像上的棋盘(从 .jpg 文件加载)以扭曲图像的透视。当 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 正常工作,直到我在棋盘周围添加了一个白边框。

我在最近的文档中发现了这一点。

在添加边框之前,有时无法识别键盘,但使用白色边框后每次都能正常工作。

关于c++ - opencv 中 findChessboardCorners() 的结果不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11147721/

相关文章:

c++ - 格式化 .txt 文件中的字符串 (C++)

c++ - 在 3D 世界中使用 Alpha 混合的 Z 顺序

c# - 使用 c# 或 c++ 的分水岭

.net - 增加图像中特定颜色的亮度?

c++ - OpenCV 词袋分类器中的分数计算

不知道节点名称的 OpenCV YAML

c# - 关闭 Windows 8 Charm Bar

c++ - Visual Studio 2012 构建挂起

java - 使用 YCrCb 颜色空间进行颜色检测?

c++ - cvShowImage 不显示图像