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

Python进行270°相机标定调用cv2.cornerSubPix报(-215)断言错误如何解决

cv2.cornerSubPix断言错误(count >= 0)修复方案

报错根因

该错误本质是你传入cv2.cornerSubPix的角点数组corners为空,触发了OpenCV的参数合法性校验,完全是代码逻辑写反导致的:

  • cv2.findChessboardCorners的返回值ret为True时,才代表成功识别到棋盘格、corners变量存储了有效的角点坐标
  • 你的代码写了if ret != True,相当于只有识别不到棋盘格的时候才调用cornerSubPix,此时corners是空值,直接触发断言

其他代码问题

除了核心的判断逻辑错误外,你的代码还有两处明显问题:

  1. 变量未定义:你用glob读取图片路径存入了images变量,但读取图片时直接用了未定义的fname,会直接触发变量不存在的报错
  2. 标定样本不足:相机标定至少需要10~20张不同角度、不同位置的棋盘格图片才能得到可用的参数,你当前代码只读取了1张图片,后续标定步骤也会报错

修复后可运行代码

import cv2
import numpy as np
import glob

# 定义棋盘格内角点尺寸(注意是黑白格交叉点的数量,不是棋盘格的格子数)
CHECKERBOARD = (6,9)
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001)

# 存储3D世界坐标点、2D图像坐标点
objpoints = []
imgpoints = []

# 生成棋盘格3D坐标模板
objp = np.zeros((1, CHECKERBOARD[0] * CHECKERBOARD[1], 3), np.float32)
objp[0,:,:2] = np.mgrid[0:CHECKERBOARD[0], 0:CHECKERBOARD[1]].T.reshape(-1, 2)

# 读取所有标定图片,建议把所有标定图片放到/home/pi/Desktop/calib_images/目录下,后缀统一为jpg
images = glob.glob('/home/pi/Desktop/calib_images/*.jpg')
for fname in images:
    img = cv2.imread(fname)
    gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    # 检测棋盘格角点
    ret, corners = cv2.findChessboardCorners(gray, CHECKERBOARD, cv2.CALIB_CB_ADAPTIVE_THRESH + cv2.CALIB_CB_FAST_CHECK + cv2.CALIB_CB_NORMALIZE_IMAGE)
    
    # 只有检测到角点的时候才执行后续逻辑
    if ret == True:
        objpoints.append(objp)
        # 亚像素优化角点坐标
        corners2 = cv2.cornerSubPix(gray, corners, (3,3),(-1,-1), criteria)
        imgpoints.append(corners2)
        # 绘制角点并展示
        img = cv2.drawChessboardCorners(img, CHECKERBOARD, corners2, ret)
        cv2.imshow('Chessboard Corners',img)
        cv2.waitKey(500)

cv2.destroyAllWindows()

# 执行标定
h,w = gray.shape[:2]
ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(objpoints, imgpoints, (w,h), None, None)

# 可输出标定结果验证
print("内参矩阵:\n", mtx)
print("畸变系数:\n", dist)

额外注意事项

  • 先确认你用的棋盘格内角点数量是不是6*9,如果数错了也会导致findChessboardCorners返回失败
  • 270°鱼眼相机畸变较大,建议用cv2.fisheye模块的专用标定接口,精度会比普通标定接口高很多

内容的提问来源于stack exchange,提问作者Maryam Moradi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 00:45:03