cv::findChessboardCornersSB&cv::findChessboardCorners算子详细学习

发布于:2025-08-08 ⋅ 阅读:(17) ⋅ 点赞:(0)

cv::findChessboardCornersSB算子

cv::findChessboardCornersSB 是 OpenCV 中一种基于 基于分割(Segment-Based) 的棋盘格角点检测算法,相比传统的 cv::findChessboardCorners,它在复杂场景(如高畸变、遮挡、光照不均)下表现更鲁棒。以下是其核心算子和使用方法的详细说明:

bool cv::findChessboardCornersSB(
    cv::InputArray image,
    cv::Size patternSize,
    cv::OutputArray corners,
    int flags = 0
);

核心算法特点

  • 参数

    • image:输入图像(8位灰度图或彩色图,彩色图会自动转换为灰度)。

    • patternSize:棋盘格内角点的行列数(如 (9,6) 表示 9列×6行)。

    • corners:输出的角点坐标(std::vector<cv::Point2f>)。

    • flags:控制检测行为的标志(见下文)。

  • 返回值:布尔值,表示是否成功检测到所有角点。

  • 基于分割的检测
    先通过边缘检测和连通区域分析分割棋盘格的黑白方格,再通过几何约束(如平行性、正交性)拟合角点位置,而非依赖传统的角点响应函数。

  • 优势

    • 对图像畸变(如鱼眼镜头)鲁棒性更强。

    • 不需要初始的角点近似位置(传统方法依赖 findChessboardCorners 的初始猜测)。

    • 支持非对称棋盘格(通过 CALIB_CB_ASYMMETRIC_GRID 标志)

  • flags 参数选项
  • 标志 说明
    CALIB_CB_NORMALIZE_IMAGE 预处理时对图像做直方图均衡化。
    CALIB_CB_EXHAUSTIVE 启用更耗时的全局优化,提高检测精度。
    CALIB_CB_ACCURACY 使用更高精度的角点细化方法(类似 cornerSubPix 的集成)。
    CALIB_CB_ASYMMETRIC_GRID 检测非对称棋盘格(如 (5,3) 的 ChArUco 板)。
    CALIB_CB_CLUSTERING 对遮挡或噪声场景使用聚类分析。

cv::findChessboardCorners()算子

  • 功能:自动检测棋盘格角点的初始位置。

  • 参数

    • image:输入图像(需为8位灰度图)。

    • patternSize:棋盘格内角点的行列数(如 (9,6) 表示9列6行)。

    • corners:输出的角点坐标(std::vector<cv::Point2f>)。

    • flags:控制检测方式的标志(见下文)。

  • 返回值:布尔值,表示是否成功检测到所有角点。

cv::cornerSubPix()

  • 功能:对初始角点坐标进行亚像素级精细化。

  • 参数

    • image:输入灰度图。

    • corners:初始角点(输入输出参数)。

    • winSize:搜索窗口大小(如 (11,11))。

    • zeroZone:忽略的死区大小。

    • criteria:迭代终止条件(如最大迭代次数/精度)。

检测标志(flags 参数)

通过 cv::findChessboardCornersflags 参数可调整检测策略:

  • CALIB_CB_ADAPTIVE_THRESH:使用自适应二值化(推荐)。

  • CALIB_CB_NORMALIZE_IMAGE:先对图像做直方图均衡化。

  • CALIB_CB_FILTER_QUADS:过滤错误四边形区域。

  • CALIB_CB_FAST_CHECK:快速检测(可能漏检,适合实时场景)。


网站公告

今日签到

点亮在社区的每一天
去签到