使用OpenCV findChessboardCorners无法检测棋盘格角点的问题排查
OpenCV棋盘格角点检测失败的问题排查
问题情况
用Python 3.10搭配OpenCV 4.7运行以下代码后,ret返回False,corners为None,无法检测到棋盘格角点:
img = cv2.imread('1_1691050309204.jpg') gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) ret, corners = cv2.findChessboardCorners(gray, (5, 6)) print(ret) print(corners)
待检测的棋盘格图片:
问题原因及解决办法
核心错误:角点数量参数不匹配
findChessboardCorners传入的(5,6)是棋盘格内角点的行列数,但从图片可见,该棋盘格是8×8的格子,对应内角点数量为7×7,必须将参数改为(7,7),这是检测失败的主要原因。额外优化方案
- 给检测函数添加参数提升鲁棒性:
ret, corners = cv2.findChessboardCorners(gray, (7,7), flags=cv2.CALIB_CB_ADAPTIVE_THRESH | cv2.CALIB_CB_NORMALIZE_IMAGE) - 若检测到角点,可通过亚像素优化提高精度:
if ret: corners = cv2.cornerSubPix(gray, corners, (11,11), (-1,-1), (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001)) - 对灰度图做直方图均衡化,增强棋盘格线条对比度:
gray = cv2.equalizeHist(gray)
- 给检测函数添加参数提升鲁棒性:
内容的提问来源于stack exchange,提问作者xuanzhui
相关产品推荐
相关产品推荐

