我正在用OpenCV编写C++代码,我试图检测图像上的棋盘(从.jpg文件加载)以扭曲图像的视角。当findChessboardCorners()发现棋盘时,我的其他代码完美地工作。但是有时函数不会检测到模式,而且这种行为似乎是随机的。在opencv中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