我正在使用 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 版