You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python和OpenCV时Camera2无法检测棋盘角点求助

棋盘角点检测异常问题

检测代码实现

def find_corners(images, camera_name):
    imgpoints = []
    for idx, img in enumerate(images):
        criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 100, 0.001)
        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        # 查找棋盘角点
        ret, corners = cv2.findChessboardCorners(gray, grid_size, cv2.CALIB_CB_ADAPTIVE_THRESH + cv2.CALIB_CB_FAST_CHECK + cv2.CALIB_CB_NORMALIZE_IMAGE)
        if ret:
            objpoints.append(objp)
            # 亚像素级精度细化角点位置
            corners2 = cv2.cornerSubPix(gray, corners, (11, 11), (-1, -1), criteria)
            imgpoints.append(corners2)

            # 绘制并显示角点
            cv2.drawChessboardCorners(img, grid_size, corners2, ret)
            cv2.imshow(f'{camera_name} Image {idx + 1}', img)

            # 等待按键切换到下一张图像
            print(f"正在显示 {camera_name} 第 {idx + 1} 张图像。按任意键继续...")
            cv2.waitKey(0)  # 等待按键输入
            cv2.destroyAllWindows()
        else:
            print(f"{camera_name} 第 {idx + 1} 张图像未检测到棋盘")
    return imgpoints

棋盘参数设置

grid_size = (14, 14)  # 棋盘内角点尺寸

问题详情

  • 两台相机中,Camera3可正常检测到棋盘角点,但Camera2始终无法检测
  • 两张检测图像均由Solidworks生成,仅视角存在差异
  • 重新渲染保存图像后问题依旧,检测顺序不影响结果

示例图像

可正常检测的图像

可正常检测的棋盘图像

无法检测的图像

无法检测的棋盘图像

排查建议

  • 调整角点检测参数:移除cv2.CALIB_CB_FAST_CHECK参数,该参数会快速跳过疑似无棋盘的图像,可能误判视角特殊的图像;同时可尝试替换自适应阈值方法为cv2.CALIB_CB_ADAPTIVE_THRESH_GAUSSIAN_C
  • 预处理图像:对无法检测的图像做对比度增强(如cv2.equalizeHist(gray))或高斯模糊(cv2.GaussianBlur(gray, (3,3), 0)),减少细节干扰
  • 验证grid_size准确性:确认无法检测的图像中棋盘内角点数量确实为(14,14),视角倾斜可能导致视觉上的行/列数判断误差
  • 调整亚像素参数:若初步检测成功但亚像素细化失败,可尝试缩小cornerSubPix的搜索窗口(如(5,5))或放宽终止条件

内容的提问来源于stack exchange,提问作者Eric Snyder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 16:48:17