相机校准 - 无法检测棋盘
camera calibration - unable to detect chessboard
我正在使用openCV的功能检测棋盘,但没有检测到棋盘。
我使用的图片:
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);
}
found 总是等于 0。有人能解释一下为什么吗?
const Size chessboardDimensions = Size(4,8);
在这个表达式中大小应该是
Size(5,8)
因为你应该计算内部方块的角。
编辑:
如评论中所述,int found
应为 bool
。因为函数 returns if corners 是否找到。
并且作为建议,为您的函数添加快速检查选项,否则该函数可能会运行缓慢:
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;
我正在使用openCV的功能检测棋盘,但没有检测到棋盘。
我使用的图片:
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);
}
found 总是等于 0。有人能解释一下为什么吗?
const Size chessboardDimensions = Size(4,8);
在这个表达式中大小应该是
Size(5,8)
因为你应该计算内部方块的角。
编辑:
如评论中所述,int found
应为 bool
。因为函数 returns if corners 是否找到。
并且作为建议,为您的函数添加快速检查选项,否则该函数可能会运行缓慢:
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;