cv.drawChessboardCorners 是 OpenCV 中用于可视化棋盘格角点检测
cv.drawChessboardCorners 是 OpenCV 中用于可视化棋盘格角点检测结果的核心函数,常配合 cv.findChessboardCorners 使用,主要用于相机标定、立体视觉等场景的结果验证。
函数基本信息
函数原型(Python 版)
cv.drawChessboardCorners(image, patternSize, corners, patternWasFound) → image
参数说明

返回值
绘制了角点的图像(与输入 image 是同一对象,原地修改)。
核心功能
完整检测到角点:绘制所有角点,并连接成棋盘格网格(彩色线条);
未完整检测到角点:仅绘制检测到的零散角点(无网格);
角点以红色小圆点标记,网格以彩色线条连接(便于直观验证检测效果)。
使用步骤(完整示例)
完整代码(棋盘格角点检测 + 可视化)
bash
# -*- coding:utf-8 -*-
import cv2 as cv
import sys
if __name__ == '__main__':
# 读取图像
image1 = cv.imread('./images/test01.jpg')
image2 = cv.imread('./images/test02.png')
if image1 is None or image2 is None:
print('Failed to read test01.jpg or test02.png.')
sys.exit()
# 转为灰度图像
gray1 = cv.cvtColor(image1, cv.COLOR_BGR2GRAY)
gray2 = cv.cvtColor(image2, cv.COLOR_BGR2GRAY)
# 定义数目尺寸
board_size1 = (9, 6)
board_size2 = (7, 7)
# 检测角点
_, points1 = cv.findChessboardCorners(gray1, board_size1)
_, points2 = cv.findCirclesGrid(gray2, board_size2)
# 细化角点坐标
_, points1 = cv.find4QuadCornerSubpix(gray1, points1, (5, 5))
_, points2 = cv.find4QuadCornerSubpix(gray2, points2, (5, 5))
# 绘制角点检测结果
image1 = cv.drawChessboardCorners(image1, board_size1, points1, True)
image2 = cv.drawChessboardCorners(image2, board_size2, points2, True)
# 展示结果
cv.imshow('Square Result', image1)
cv.imshow('Circle Result', image2)
cv.waitKey(0)
cv.destroyAllWindows()

关键说明
棋盘格准备:需使用黑白相间的棋盘格(如 9x6 内角点对应 10x7 个方格);
亚像素细化:cv.cornerSubPix 是可选步骤,但能大幅提升角点坐标精度(对相机标定至关重要);
检测失败处理:若 ret=False,说明未完整检测到所有角点,需检查图像(如光照、棋盘格完整性)。
常见问题与解决方案

扩展应用
cv.drawChessboardCorners 常与相机标定流程结合:
检测多张棋盘格图像的角点;
用 cv.calibrateCamera 计算内参 / 外参;
用 cv.undistort 校正图像畸变;
绘制角点验证标定结果的准确性。
如果需要相机标定的完整代码示例,可以补充说明,我会进一步完善。