我正在使用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);
}
发现总是等于0.有人可以解释一下为什么吗?
答案 0 :(得分:4)
const Size chessboardDimensions = Size(4,8);
在此表达式中,大小应为
Size(5,8)
因为你应该计算内部正方形的角落。
编辑:
正如评论中所述,int found
应为bool
。因为如果找到角落,函数会返回。
并且随着建议为您的功能添加快速检查选项,否则该功能可能会工作滞后:
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;